Algorithm
将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。
比如输入字符串为 “PAYPALISHIRING” 行数为 3 时,排列如下:
P A H N
A P L S I I G
Y I R
之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:“PAHNAPLSIIGYIR”。
public String convert(String s, int numRows) {
if (numRows == 1) {
return s;
}
List<StringBuilder> list = new ArrayList<>(numRows);
boolean flag = false;
int num = 1;
for (int i = 0; i < s.length(); i++) {
if (i < numRows) {
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(s.charAt(i));
list.add(stringBuilder);
} else {
if (flag) {
list.get(num).append(s.charAt(i));
} else {
list.get(numRows - num - 1).append(s.charAt(i));
}
num++;
if (num >= numRows) {
num = 1;
flag = !flag;
}
}
}
StringBuilder result = new StringBuilder();
for (StringBuilder builder : list) {
result.append(builder);
}
return result.toString();
}
解题思路:
特殊情况,就是那种只有1行的,这种情况直接输出就行了。
如果多行的数据,然后有几行,就准备几个SpringBuilder,然后分别装每行对应的字符串,这样,我们就可以遍历,但是遍历呢,要以行数为一个单位,一次是正序,一次是倒序。
Review
这篇文章,讲了作者为什么放弃印象笔记,专用obsidian的故事,也对比了一下obsidian和印象笔记的优缺点。恰好,obsidian也是我现在使用的笔记工具。
Tip
这周看了一下Arthas这个插件,真的牛逼,可以打印出你程序当前运行对象的各种信息:
Share
再分享一波《高七》
七个习惯的原则:
- 习惯一:主动积极
责任、选择、担当、主动、智慧 - 习惯二:以终为始
愿景、承诺、目的 - 习惯三:要事第一
专注、诚信、纪律、优先级 - 习惯四:双赢思维
互惠、公平、富足 - 习惯五:知彼解己
尊重、互相理解、同理心、勇气 - 习惯六:统合综效
创新、合作、多元化、谦逊 - 习惯七:不断更新
更新、持续改进、平衡