leetcode: (6) ZigZag Conversion

来源:互联网 发布:中文域名好用吗 编辑:程序博客网 时间:2024/05/05 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   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".

文章要求进行‘Z’排列,如下

1                       9                          17

2                 8   10                  16  18

3           7         11           15         19         23

4     6               12    14                20   22

5                      13                         21

方法一:

建一个numRows个元素的string数组。根据行数和列数的变化来修改,变化的情况;

当列数col为numRows-1的整数倍时,依次将字符存到string[row]里面,row++,i++;

                                                                   当row==numRows时,存下字符后,i++,row--,col++;

当列数col不是numRows-1的整数倍时,存下字符后,i++,row--,col++;

费时 24ms

string convert(string s, int numRows) {        if (numRows>=s.length() || numRows==1) return s;string *temp =new string[numRows];string res;int col,j=0;for(int i=0,row=0,col=0;i<s.length();){ if(col%(numRows-1)==0) { if(row==numRows-1) {    temp[row].push_back(s[i]);    i++;row--;col++; } else {    temp[row].push_back(s[i]);    i++;row++; } } else { temp[row].push_back(s[i]); i++;row--;col++;  }}for(int j=0;j<numRows;j++) res += temp[j]; return res;}



0 0