6. ZigZag Conversion

一、题目

  1、审题:

    

  2、分析:

    将所给字符串按照之字型展开成 n 行,展开后按照行将其输出,求组成的新字符串。

二、解答

  1、分析: 

    考虑用数组存放之字形图形的每一行,由于每一个行并非一次确定,故StringBuffer比较适合。图形分为上升、下降两种趋势,用 flag 进行标识,从而可以确定每个字符与数组的下标的对应关系。

  

class Solution {
    public String convert(String s, int numRows) {

        int len = s.length();
        if( len < 2 || numRows == 1)
            return s;

        StringBuffer[] sb = new StringBuffer[numRows];
        for (int i = 0; i < numRows; i++) {     // 初始化
            sb[i] = new StringBuffer();
        }

        int row = 1, index = 0;
        boolean flag = true;
        while(index < len) {

            sb[row - 1].append(s.charAt(index));
            if(flag == true) {      //下降
                row++;
                if(row == numRows)
                    flag = false;
            }
            else {                  //上升
                row--;
                if(row == 1)
                    flag = true;
            }
            index++;
        }

        for (int i = 1; i < numRows; i++) {
            sb[0].append(sb[i].toString());
        }

        return sb[0].toString();
    }
}
原文地址:https://www.cnblogs.com/skillking/p/9388655.html