ZigZag Conversion(java)

来源:互联网 发布:智能数据的定义 编辑:程序博客网 时间:2024/05/06 01:40

问题描述:
The string “PAYPALISHIRING” is written in a zigzag pattern on a given number of rows like this: (you may want to display this pattern in a fixed font for better legibility)

P A H N
A P L S I I G
Y I R
And then read line by line: “PAHNAPLSIIGYIR”
Write the code that will take a string and make this conversion given a number of rows:

string convert(string text, int nRows);
convert(“PAYPALISHIRING”, 3) should return “PAHNAPLSIIGYIR”.

分析:row从0到numRow,然后对于每一行而言,从该处开始,读取一个gap之外的数据。重复下去

代码如下:396ms,时间复杂度为O(n)

public class Solution {    public String convert(String s, int numRows) {        if(numRows==1)            return s;        else if(numRows>=s.length())            return s;        char[] res = new char[s.length()];        int resIndex = 0;        int gap = numRows*2-2;        int gap2;        int index;        boolean down;        boolean up ;        for(int i = 0;i<numRows;i++){            index = i;            down = true;            up = false;            if(i==0||i==numRows-1){                while(index<s.length()){                    res[resIndex++] = s.charAt(index);                    index = index+gap;                }                continue;            }            while(index<s.length()){                if(down){                    gap2 = 2*numRows-2*i-2;                    res[resIndex++] = s.charAt(index);                    index = index+gap2;                    down = false;                    up = true;                }else if(up){                    gap2 = 2*i;                    res[resIndex++] = s.charAt(index);                    index = index+gap2;                    down = true;                    up = false;                }            }        }        return new String(res);    }}
0 0
原创粉丝点击