标签:style blog http io ar color sp for on
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"形式是这样。
(吐槽一下,这明明是"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 };
标签:style blog http io ar color sp for on
原文地址:http://www.cnblogs.com/ittinybird/p/4148758.html