zoukankan      html  css  js  c++  java
  • [leetcode]ZigZag Conversion

    ZigZag Conversion

    The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows like this: (you may want to display this pattern in a fixed font for better legibility)

    P   A   H   N
    A P L S I I G
    Y   I   R
    

    And then read line by line: "PAHNAPLSIIGYIR"

    Write the code that will take a string and make this conversion given a number of rows:

    string convert(string text, int nRows);

    convert("PAYPALISHIRING", 3) should return "PAHNAPLSIIGYIR".

    算法思路:

    思路1:

    模拟题,找下规律。

    代码:

    1 public class Solution {
     2     public String convert(String s, int nRows) {
     3         if(s == null || s.length() <= nRows || nRows == 1) return s;
     4         StringBuilder sb = new StringBuilder();
     5         for(int i = 0; i < nRows; i++){
     6             if(i == 0 || i == nRows - 1){
     7                 int index = i;
     8                 while(index < s.length()){
     9                     sb.append(s.charAt(index));
    10                     index += 2 * (nRows - 1);
    11                 }
    12             }else{
    13                 int index = i;
    14                 while(index < s.length()){
    15                     sb.append(s.charAt(index));
    16                     if(index + 2 * nRows - 2 * i - 2 < s.length()){
    17                         sb.append(s.charAt(index + 2 * nRows - 2 * i - 2));
    18                     }
    19                     index += 2 * (nRows - 1);
    20                 }
    21             }
    22         }
    23         return sb.toString();
    24     }
    25 }

    第二遍:

    稍稍优化一下下:

    【边界情况】:nRows == 1的时候,直接输出s

     1 public class Solution {
     2     public String convert(String s, int nRows) {
     3         if(s == null || s.length() == 0 || s.length() <= nRows || nRows == 1 ) return s;
     4         int leap = 2 * nRows - 2;
     5         char[] array = s.toCharArray();
     6         StringBuilder sb = new StringBuilder();
     7         for(int i = 0; i < nRows; i++){
     8             sb.append(array[i]);
     9             int j = 1;
    10             while(i + j * leap < s.length()){
    11                 if(i > 0 && i < nRows - 1) sb.append(array[i + j * leap - 2 * i]);
    12                 sb.append(array[i + j * leap]);
    13                 j++;
    14             }
    15             if(i > 0 && i < nRows - 1 && i + j * leap - 2 * i < s.length()) sb.append(array[i + j * leap - 2 * i]);
    16         }
    17         return sb.toString();
    18     }
    19 }

    FYI

  • 相关阅读:
    SQL面试题集合
    绕过UAC提示以管理员身份运行程序
    一个在VS2010中不能加载项目的问题
    Windows下硬链接、软链接和快捷方式的区别
    自动化测试中FindWindow与FindWindowEx的使用示例
    在C#中调用批处理文件
    windows的自动登陆问题
    PowerShell操作XML遇到的问题
    MySQL集群MGR架构for单主模式
    MySQL集群MGR架构for多主模式
  • 原文地址:https://www.cnblogs.com/huntfor/p/3864307.html
Copyright © 2011-2022 走看看