题目
代码分析
通过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次

京公网安备 11010502036488号