首页 > 代码库 > Leetcode: ZigZag Conversion
Leetcode: ZigZag Conversion
一道数学题,参考了网上的思路,先计算一下每一个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 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。