算法思路:
遍历字符串:
取出字符并追加到res的第i排动态字符串后面去,这里巧妙地使用了标志flag,确定的是从上往下走还是从下往上走,当碰到i等于0(处于第一排)或者当i等于numRows - 1(处于最后一排)的时候将flag乘以-1,这样做的目的就是使得从上到下(从下到上)可以变成从下到上(从上到下)。
public String convert(String s, int numRows) { if(numRows == 1){ return s; } List<StringBuilder> res = new ArrayList<StringBuilder>(); int i = 0, flag = -1; for(i = 0; i < numRows; i++){ res.add(new StringBuilder()); } int j = 0; for(i = 0; (i < numRows) && (j < s.length()); i += flag, j++){ res.get(i).append(s.toCharArray()[j]); if(i == 0 || i == numRows - 1){ flag = -1 * flag; } } StringBuilder z = new StringBuilder(); for(i = 0; i < numRows; i++){ z.append(res.get(i)); } return z.toString(); }
下面是对用到的语法知识的总结:
1、StringBuilder类的使用:
(16条消息) Java的StringBuilder类_程序员buddha的博客-CSDN博客
2、toCharArray() 方法的使用:
Java toCharArray() 方法 | 菜鸟教程 (runoob.com)
3、理解List<String> list=new ArrayList<String>():
(16条消息) 理解List<String> list=new ArrayList<String>();_moomin的小粉丝的博客-CSDN博客
4、List的详细用法:
(16条消息) Java中List的详细用法_Barcon的博客-CSDN博客_java list
5、ArrayList的用法: