leetcode-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 s, int numRows);

Example 1:

Input: s = "PAYPALISHIRING", numRows = 3
Output: "PAHNAPLSIIGYIR"

Example 2:

Input: s = "PAYPALISHIRING", numRows = 4
Output: "PINALSIGYAHRPI"
Explanation:

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

 

根据题意就是讲原先的字符串 以z型输出,再重新拼接成一个结果字符串在输出最终结果。

    public String convert(String s, int numRows) {
        if (s == null || s.isEmpty() || numRows <= 0) {
            return "";
        }
        if(s.length() <= numRows || numRows==1) {
            return s;
        }
        String res="";
        //以s = "PAYPALISHIRING", numRows = 3为例第一行所在原先的字符串中为0,0+(numRows-1)*2,0+(numRows-1)*2+(numRows-1)*2。。。
        //即(n>1时)第n个为(numRows-1)*n,n=1时为0
        int row= 0;
        while(row<numRows) {
            
            if (row == 0 || row == numRows-1) {
                int tmpIdex=row;
                res += s.charAt(tmpIdex);
                while ((tmpIdex = tmpIdex+(2  * (numRows - 1))) < s.length()) {
                    res += s.charAt(tmpIdex);
                }
            } else {
                int tmpIdex = row;
                int tmpIdex2 = row;
                if (tmpIdex < s.length()) {
                    res += s.charAt(tmpIdex);
                }
                if ((tmpIdex2 =( tmpIdex2 + 2 * (numRows - row - 1))) < s.length()) {
                    res += s.charAt(tmpIdex2);
                }
                while ((tmpIdex = tmpIdex+(2  * (numRows - 1))) < s.length()) {
                    
                    res += s.charAt(tmpIdex);
                    if ((tmpIdex2 = (2  * (numRows - 1) + tmpIdex2) )< s.length()) {
                        res += s.charAt(tmpIdex2);
                    }
                }

            }
            row++;
        }
        
        return res;
    }

上一篇:leetcode刷题6


下一篇:LeetCode刷题笔记--6. ZigZag Conversion-记录考虑不周的算法,悲剧的重写