LeetCode刷题(C++)——ZigZag Conversion(Medium)
2017-05-04 08:26
274 查看
The string
of rows like this: (you may want to display this pattern in a fixed font for better legibility)
And then read line by line:
Write the code that will take a string and make this conversion given a number of rows:
return
思路:之字形转换如下:
观察可以发现:竖着的每一列都有numRows个元素,斜着的有numRows-2个元素,于是我们可以把竖着的一列和斜着的一列看成是一个循环周期,按照从上到下在从左下角到右上角的顺序存储字符。设置一个string数组,行数为numRows。
"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".
思路:之字形转换如下:
观察可以发现:竖着的每一列都有numRows个元素,斜着的有numRows-2个元素,于是我们可以把竖着的一列和斜着的一列看成是一个循环周期,按照从上到下在从左下角到右上角的顺序存储字符。设置一个string数组,行数为numRows。
class Solution { public: string convert(string s, int numRows) { if (s.empty()) return ""; if (s.size() == 1) return s; string *ss = new string[numRows]; int i = 0, gap = numRows - 2; while (i < s.size()) { for (int j = 0; j < numRows&&i < s.size();++j) ss[j] += s[i++]; for (int j = gap;j > 0 && i < s.size();--j) ss[j] += s[i++]; } string str; for (int i = 0; i < numRows;i++) str += ss[i]; delete[] ss; ss = NULL; return str; } };
相关文章推荐
- [LeetCode] 003. Longest Substring Without Repeating Characters (Medium) (C++/Java/Python)
- [LeetCode] 011. Container With Most Water (Medium) (C++/Java/Python)
- LeetCode的medium题集合(C++实现)五
- LeetCode的medium题集合(C++实现)十
- LeetCode的medium题集合(C++实现)九
- [LeetCode] 001. Two Sum (Medium) (C++/Java/Python)
- LeetCode的medium题集合(C++实现)十四
- LeetCode的medium题集合(C++实现)三
- LeetCode的medium题集合(C++实现)二
- LeetCode的medium题集合(C++实现)十二
- [LeetCode] 012. Integer to Roman (Medium) (C++/Java/Python)
- [LeetCode] 022. Generate Parentheses (Medium) (C++/Java/Python)
- [LeetCode] 018. 4Sum (Medium) (C++/Java/Python)
- LeetCode的medium题集合(C++实现)四
- [LeetCode] 034. Search for a Range (Medium) (C++/Java)
- [LeetCode] 005. Longest Palindromic Substring (Medium) (C++/Java/Python)
- [LeetCode] 017. Letter Combinations of a Phone Number (Medium) (C++/Java/Python)
- [LeetCode] 029. Divide Two Integers (Medium) (C++/Python)
- LeetCode的medium题集合(C++实现)七
- LeetCode的medium题集合(C++实现)十三