首页 > 代码库 > ZigZag Conversion
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 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"
.
刚开始没读懂,纠结好久才知道"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 };
ZigZag Conversion
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。