https://oj.leetcode.com/problems/zigzag-conversion/
将字符串Z形字排列后,再重新一行一行输出。
可以找到每一行字符位置的规律,然后填充进去。
敲代码之前,先演算好了,每个变量是怎样表达的,规律到底是什么样的。
#include <iostream> #include <vector> #include <string> using namespace std; class Solution { public: string convert(string s, int nRows) { if(s.size() == 1 || nRows == 1 || nRows == 0) return s; string str_ans; vector<string> ans; ans.resize(nRows); int Num = nRows + nRows - 2; int times = 0; int paddle = 0; while(times >=0 ) { for(paddle = 0; paddle<nRows;paddle++) { int pivot = times*Num + paddle; if(pivot >= s.size()) { times = -2; break; } ans[paddle] += s[pivot]; if( !paddle ==0 && paddle != (nRows -1)) { int temp = times*Num + nRows -1 + nRows -1 - paddle; if( temp < s.size()) ans[paddle] += s[temp]; } } times++; } for(int i = 0; i< nRows; i++) str_ans += ans[i]; return str_ans; } }; int main() { class Solution myS; cout<<myS.convert("ABC",2)<<endl; return 0; }