算法练习——Z 字形变换

2021年1月11日LeetCode每日一题为1202. 交换字符串中的元素,看到这题真的很无奈,一点思路都没有,直接查看题解发现是使用并查集完成,算法基础不够,仍需要加强学习。因此选择完成6. Z 字形变换,这道题难度算中等中的简单吧,一开始我还在想要不要用一个二维数组存起来,然后发现容易溢出,于是查看了一下题解发现可以使用StringBuilder来代替,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Solution {
public String convert(String s, int numRows) {
if (numRows == 1) return s;
List<StringBuilder> rows = new ArrayList<StringBuilder>();
for (int i = 0; i < numRows; i++) rows.add(new StringBuilder());
char[] chars = s.toCharArray();
boolean isDown = true;
for (int i = 0, j = 0; i < chars.length; i++) {
rows.get(isDown ? j++ : j--).append(chars[i]);
if (j == numRows - 1 || j == 0) isDown = !isDown;
}
StringBuilder ret = new StringBuilder();
for (StringBuilder row : rows) {
ret.append(row);
}
return ret.toString();
}
}

练习算法能够学到很多简单、清晰的写法,开阔思路和眼界,解放自己写代码思维限制,这个月第三次遇到图算法,弱势很明显,同时需要加快步伐,扎实树与图的结构基础和遍历算法。