题目
代码分析
通过flag来改变走的方向
代码实现
public static String convert(String s, int nRows) { ArrayList<StringBuilder> list=new ArrayList<>(); for(int i=0;i<nRows;i++) { list.add(new StringBuilder()); } char[] chas=s.toCharArray(); int count=0; boolean flag=true;//true是正向走,false是倒着走 for(int i=0;i<chas.length;i++) { if(flag) { list.get(count).append(chas[i]); if(count==nRows-1){ flag=false; count--; continue; } count++; } else { list.get(count).append(chas[i]); if(count==0){ flag=true; count++; continue; } count--; } } StringBuilder res=new StringBuilder(); for(StringBuilder e:list) { res.append(e.toString()); } return res.toString(); }
解法2
第二次完成这道题的写法
class Solution { public String convert(String s, int numRows) { if(numRows==1) return s; StringBuilder[] sbs=new StringBuilder[numRows]; for(int i=0;i<numRows;i++) { sbs[i]=new StringBuilder(); } int row=0; boolean flag=true; char[] chas=s.toCharArray(); for(char ch:chas) { if(flag) { sbs[row++].append(ch); if(row==numRows) { flag=false; row=row-2; } }else { sbs[row--].append(ch); if(row==-1){ flag=true; row=row+2; } } } StringBuilder res=new StringBuilder(); for(StringBuilder sb:sbs) { res.append(sb.toString()); } return res.toString(); } }
学习情况
1次
2次