本文主要是介绍06. Z 字形变换,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
这道题目在解题时关键是要弄清楚“z字形排列”是怎么一回事,仅仅根据numRow为3的情况可能看的不会
太明显,把行数为4和行数为3的情况,做一个对比,更容易找到解题思路。
1)当不考虑对角线上的元素时,完成可以看成是数字是一列一列的跳转,且跳转距离为numRow * 2 - 2;
2) 再去考虑计算对角线的元素的位置。
public String convert(String s, int numRows) {int k = 0;int offset = numRows * 2 - 2;if (offset <= 0) {return s;}StringBuilder builder = new StringBuilder();for (int i=0; i<numRows; i++) {k = i;if (i == 0 || i == numRows-1) {while (k < s.length()) {builder.append(s.charAt(k));k += offset;}} else {while (k < s.length()) {builder.append(s.charAt(k));int m = numRows - 2; // 对角线元素个数int n = numRows - i + m - i;if (k + n < s.length())builder.append(s.charAt(k+n));k += offset;}}}return builder.toString();}
这篇关于06. Z 字形变换的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!