汉沽网站建设制作,哈尔滨整站,wordpress卡顿,库尔勒谁在做电商网站建设文章目录题目描述解题 代码二维数组ArrayList StringBuilder题目描述
这题目有点搞#xff0c;理解题意得时候直接结合给的例子比较好。本质就是#xff1a;从顶部开始#xff0c;往下逐个走#xff1b;到底了就反向#xff0c;往上逐个走#xff1b;以…
文章目录题目描述解题 代码二维数组ArrayList StringBuilder题目描述
这题目有点搞理解题意得时候直接结合给的例子比较好。本质就是从顶部开始往下逐个走到底了就反向往上逐个走以此类推直到结束。上面的本质是只考虑了竖直方向的情况至于水平方向因为最终结果实际上只需要是按序的即可对中间用于构成Z的空内容实际上不影响。
解题 代码
二维数组
起初想到的方法通过构造二维数组把整个Z字完全复现。可以跑出结果但是复杂度比较高O(n2n^2n2这里就不贴了 没啥意义
ArrayList StringBuilder
这里是参考了题解里Krahets的做法感觉有很多可以学习的地方。numRows为1的情况直接返回原串即可。 图片引用自Krahets的题解 class Solution {public String convert(String s, int numRows) {if(numRows 1){return s;}// 初始化链表 字符串ListStringBuilder lsb new ArrayList();for (int i 0; i numRows; i) {lsb.add(new StringBuilder());}// flag是方向可以反向。int i 0, flag -1;for(char c : s.toCharArray()){lsb.get(i).append(c);// 到头了需要改方向了if(i 0 || i numRows - 1){flag -flag;}i flag;}// 生成答案StringBuilder ans new StringBuilder();for (int j 0; j numRows; j) {ans.append(lsb.get(j));}return ans.toString();}
}时间复杂度O(n)相当于遍历一次字符串空间复杂度O(n)每个字符占一个空间