LeetCode 6. ZigZag Conversion

来源:互联网 发布:华视身份证阅读器软件 编辑:程序博客网 时间:2024/06/11 03:40

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   NA P L S I I GY   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".

Subscribe to see which companies asked this question.

Z字型打印。

public class Solution {    public String convert(String s, int numRows) {        int len = s.length();        if (len<=numRows||numRows==1){            return s;        }        int f = 0;        StringBuilder ans = new StringBuilder();        for(int j=0;j<numRows;j++){            int l = 0;            for(int i=j;i<len;i+=(f==0?2*(numRows-j-1):2*j)){                ans.append(s.charAt(i));                 if(j!=0&&j!=numRows-1){                    f = 1 - f;                }                if(l==0){                    f = 0;                    l = 1;                }                if(j==numRows-1){                    f = 1;                    l = 1;                }                if(ans.length()==s.length()){                    break;                }            }        }        return ans.toString();    }}
tips:一定记得用StringBuilder! 相同的程序,使用String耗时128ms,stringbuilder加速一倍以上

0 0