6. 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".

一刷
题解:

根据例子列出n = 3和n = 4的情况,计算出列间距zigSize = 2 * numRows - 2,所以每行元素为 i + n * zigSize以及斜线的计算公式,当i为行数时,斜线上元素为n * zigSize - i。

Time Complexity - O(n), Space Complexity - O(n)。

public class Solution {
    public String convert(String s, int numRows) {
        int zigSize = 2*numRows - 2;
        if(s == null || s.length() == 0 || zigSize <=0) return s;
        StringBuilder res = new StringBuilder();
        
        for(int i=0; i<numRows; i++){ //row
            for(int j=0; j<s.length(); j+=zigSize){ //col
                if(i + j < s.length()) res.append(s.charAt(i + j));//first row
                if(i!=0 && i!= numRows-1 && j + zigSize - i <s.length()){
                    res.append(s.charAt(j + zigSize - i));
                }
            }
        }
        
        return res.toString();
    }
}

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 11,282评论 0 33
  • The string "PAYPALISHIRING" is written in a zigzag patter...
    NapoleonY阅读 37评论 0 0
  • 不要轻易满足那些理所当然的答案,它们看似合情合理,事实上却只是一个肤浅的答案,它们并没有解决本质上的问题。 为什么...
    Joway阅读 34评论 0 0
  • 文/苏颜 五一假期、行程等又是此时的一个超热门话题,而我似乎还未从这烟雨三四月中恍过神来。 漫漫雨季,走在路上或等...
    云影拂尘阅读 685评论 15 19
  • 心中有佛,见的都是光明,说的都是善良;心中有魔,见的都是黑暗,说的都是邪恶。如果我们对这个世界充满了怨恨,那么这个...
    奔跑的蜗小牛阅读 227评论 1 0