知识大全

每天一题LeetCode【第1天】

2017-01-21  本文已影响1609人  草稿纸反面

T6. ZigZag Conversion 【Easy

题目

把字符串 "PAYPALISHIRING" 用ZiaZag(曲折)的形式,在给定的数字(很据后面我推测它这里指的是3)下表示如下

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

然后对它一行行读取,就变成了 "PAHNAPLSIIGYIR"

写如下的一个方法,传参一个String和一个int,返回一个string:

string convert(string text, int nRows);

如果执行方法 convert("PAYPALISHIRING", 3) ,应该返回 "PAHNAPLSIIGYIR"

代码

代码参考 Top Solution,稍作注释

public String convert(String s, int nRows) {
    //转化成char字符数组方便后面使用
    char[] c = s.toCharArray();
    //得到输入的字符数量
    int len = c.length;
    //用StringBuffer,后面详说
    StringBuffer[] sb = new StringBuffer[nRows];
    for (int i = 0; i < sb.length; i++) sb[i] = new StringBuffer();
    int i = 0;
    //关键代码,通过i++一个个读完
    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();
}

思路

把事例的那个文字输入我觉得换成下面那样更容易理解(因为这样看上下看着对称感觉不会造成不必要的误解吧)

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

补充

上一篇下一篇

猜你喜欢

热点阅读