ZigZag Conversion

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"

 

刚开始没读懂,纠结好久才知道"ZigZag"形式是这样ZigZag Conversion

(吐槽一下,这明明是"N"嘛!)

 处理字符串,感觉指针有天然优势;

 1 //将p指向的字符串,写入二维数组show中

 2 for(int i=0;i<len;++i){//len 字符串长度

 3         show[row][column] = *(p+i);

 4         ++row;

 5         if(column%(row-1) == 0){//如果能整除说明正在写的那段字符是存在“Z”的“边”上

 6             if(row == row){

 7                 row -= 2;

 8                 ++column;

 9             }

10         }

11         else{

12             row -= 2;

13             ++column;

14         }

15     }

而leetcode上需要用c++ 写,而且字符串是string 类。

 1 //O(N²) QAQ

 2 class Solution {

 3 public:

 4     string convert(string s, int nRows) {

 5         if(nRows == 1)

 6             return s; //第一次提交的时候系统提示 INPUT: "A" 1 RUNTIME ERROR 加上就可以ac了

 7         int len =s.size()/2; //根据上行,至少为2行

 8         char show[nRows][len];

 9         for(int i=0;i<nRows;++i)

10             for(int j=0;j<len;++j)

11                 show[i][j] = ' ';//初始化一个二维数组便于我们存放 “zigzag”形式的字符

12         string::iterator it = s.begin();

13         int row=0,column=0;

14         for(int i =0;i<len;++i){

15             show[row][column] = *it++;

16             ++row;

17             if(column%(nRows-1) == 0){// 判断是否是“Z”的“边”

18                 if(row == nRows){

19                     row -= 2;// 这里-=2,line 16 row自增了一次

20                     ++column;

21                 }

22             }

23             else {

24                 row -= 2;

25                 ++column;

26             }

27         }

28         string res;

29         for(int i=0;i<nRows;++i)

30             for(int j=0;j<len;++j){

31                 if(show[i][j] != ' ')

32                     res.push_back(show[i][j]);

33             }//按规定的形式读出来放入 string res 中

34         return res;

35     }

36 };

 

你可能感兴趣的:(conversion)