ZigZag Conversion

来源:互联网 发布:jk制服淘宝店推荐 编辑:程序博客网 时间:2024/06/17 06:20

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".

一定考虑所有测试用例再写代码!

可能的情况:

 

class Solution {public:    string convert(string s, int nRows) {string str;if(!s.size() || nRows <= 0)return str;if(s.size() <= nRows)return s;ostringstream os;for(int r = 0; r < nRows; r++){int c = 1,idx = r;os << s[idx];int ood_step = 2 * (nRows - r) - 2;int even_step = 2 * (r + 1) - 2;if(!ood_step && !even_step)ood_step = 1;while(idx < s.size()){if(ood_step && idx + ood_step < s.size())os<< s[idx + ood_step];if(even_step && idx + ood_step + even_step < s.size())os<< s[idx + even_step + ood_step];idx += even_step + ood_step;}}return os.str();}    };


 

0 0
原创粉丝点击