题目

代码分析

通过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次