LeetCode(4)

来源:互联网 发布:淘宝一元抢购在哪里 编辑:程序博客网 时间:2024/06/05 21:07


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


什么是zigzag:http://blog.csdn.net/ljiabin/article/details/40477429


”第一次看到这个题目的人,可能不知道ZigZag是什么意思,简单解释一下,就是把字符串原顺序012345……按下图所示排列:


比较直观的解法是,用一个字符串数组 string[rows] 来存储每一行,最后一拼接就是最终结果。“


我是真的没明白这个是什么 .中间红色那一部分 写得很巧妙。


Create nRows StringBuffers, and keep collecting characters from original string to corresponding StringBuffer. Just take care of your index to keep them in bound.

public String convert(String s, int nRows) {    char[] c = s.toCharArray();    int len = c.length;    StringBuffer[] sb = new StringBuffer[nRows];    for (int i = 0; i < sb.length; i++) sb[i] = new StringBuffer();        int i = 0;    while (i < len) {        for (int idx = 0; idx < nRows && i < len; idx++) // vertically down            sb[idx].append(c[i++]);        for (int idx = nRows-2; idx >= 1 && i < len; idx--) // obliquely up            sb[idx].append(c[i++]);    }    for (int idx = 1; idx < sb.length; idx++)        sb[0].append(sb[idx]);    return sb[0].toString();}


原创粉丝点击