6. ZigZag Conversion

Posted skillking

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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();
    }
}

 

以上是关于6. ZigZag Conversion的主要内容,如果未能解决你的问题,请参考以下文章

学习(Swift)Leetcode 6. ZigZag Conversion

6. ZigZag Conversion

6. ZigZag Conversion

6. ZigZag Conversion

6. ZigZag Conversion (字符串的连接)

leetcode题解 6.ZigZag Conversion