一道数学题,参考了网上的思路,先计算一下每一个zig包含的字符个数,实际上是zigSize = nRows + nRows –
2
然后一行一行的加s中的特定元素就行。
第一行和最后一行都只需要加一个字符,每一个zig,而且在s中的index间隔是zigSize。
中间每一行需要添加两个字符到结果中去。第一个字符同上;第二个字符和前面添加这个字符在s上的inde相差正好是zigSize
– 2*ir。ir是行index。
有一些细节需要注意:写循环结束条件时候要小心,如果这时候base已经超过了s.length(), 但是base - 2* i 还没有超过, i 是行数,这样就有可能漏掉 base - 2 * i 这种情况
1 public class Solution { 2 public String convert(String s, int nRows) { 3 if (nRows == 1) return s; 4 StringBuffer res = new StringBuffer(); 5 int zigsize = 2 * nRows - 2; 6 int base = 0; 7 for (int i = 0; i <= nRows - 1; i++) { 8 for (base = i; ; base += zigsize) { 9 if (i == 0 || i == nRows - 1) { 10 if (base >= s.length()) break; 11 res.append(s.charAt(base)); 12 } 13 else if (i > 0 && i < nRows - 1) { 14 int t = base - 2 * i; 15 if (t > 0 && t < s.length()) res.append(s.charAt(t)); 16 if (base >= s.length()) break; 17 res.append(s.charAt(base)); 18 } 19 } 20 } 21 return res.toString(); 22 } 23 }
Leetcode: ZigZag Conversion,布布扣,bubuko.com
原文:http://www.cnblogs.com/EdwardLiu/p/3781136.html