6. ZigZag Conversion

来源:互联网 发布:景区票务软件 编辑:程序博客网 时间:2024/06/09 13:11

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   NA P L S I I GY   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".

Subscribe to see which companies asked this question

1.非常直接的,没有优化过

public class Solution {    public String convert(String s, int numRows) {        if(numRows==1)            return s;        String[] data=new String[numRows];        int i=0;        int j=0;        for(i=0;i<numRows;++i){            data[i]="";        }        for(i=0;i<s.length();i=i+numRows*2-2){            int z=i;            for(j=0;j<numRows&&z<s.length();++j){                data[j]+=s.charAt(z);                ++z;            }            for(j=numRows-2;j>0&&z<s.length();--j){                data[j]+=s.charAt(z);                ++z;            }        }        String re="";        for(i=0;i<numRows;++i)            re+=data[i];        return re;        }}

2.More elegent code find in discuss

public class Solution {    public String convert(String s, int numRows) {        if(numRows<=1)            return s;        StringBuilder[] data=new StringBuilder[numRows];        for(int i=0;i<numRows;++i)            data[i]=new StringBuilder("");        int index=0;        int step=1;        for(int i=0;i<s.length();++i){            data[index].append(s.charAt(i));            if(index==0)                step=1;            if(index==numRows-1)                step=-1;            index+=step;            }        String re="";        for(int i=0;i<numRows;++i){            re+=data[i].toString();        }        return re;            }}


0 0
原创粉丝点击