GitHub : https://github.com/MummyDing/LeetCode
Source : https://leetcode.com/problems/zigzag-conversion/
Description :
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 RAnd 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"
.
题解: 总算有个1A了,不过也debug好久. 题目的意思是给定一个字符串,你需要以蛇形排列成锯齿图形.其实这就是一道找规律的题. 我假设字符串长度为len,需要排列成R行的锯齿图形,那么就有:
------------这里每个数字表示字符对应的下标
根据这个就可以找出规律
1. 第一行和最后一行: 横向递增公差为 2R-2
2. 中间的行:奇数列(列数从0开始标号)与后一行相加之和 = (col*2+2)*(R - 1)
3. 中间的行:偶数列(列数从0开始标号)与后一行相加之和 = (col+1)*(numRows - 1)*2
根据这个几个规律就很容易写代码了.(我谢了一面A4纸...囧...)
/* Problem: ZigZag Conversion Description: https://leetcode.com/problems/zigzag-conversion/ Author: MummyDing Date : 2015-12-30 Run Time: 20 ms */ #include <iostream> using namespace std; class Solution { public: string convert(string s, int numRows) { if(numRows <= 1) return s; string res = ""; int len = s.size(); for(int i=0 ; i<numRows ; i++){ int col = 0 ; for( int j=i ; j<len ; ){ res += s[j]; if( i== 0 || i == numRows-1 ){ j += (2*numRows - 2); }else if(col % 2 == 0){ j = ((col*2+2)*(numRows - 1) -j); }else { j = ((col+1)*(numRows - 1)*2 -j); } col++; } } return res; } }; int main() { //Solution s; //cout<<s.convert("1234567890abcd",6)<<endl; return 0; }
【转载请注明出处】
Author: MummyDing
出处:http://blog.csdn.net/u012560612/article/category/6047025