Leetcode_实现zigzag的转换_20161228
#include<iostream> //#include<valarray> #include<vector> #include<string> using namespace std; class Solution { public: string convert(string s, int numRows) { int h2 = s.length(); int lie1 = h2; if (numRows != 1) lie1 = h2 /2 + 1; //得到排列的列数 vector<vector<char>>ret(numRows); //定义二维向量 for (int i = 0; i < numRows; i++) ret[i].resize(lie1); //得到 numRows*lie1的矩阵 int i = 0; int j = 0; int i0 = 0; for (int count = 0; (count <= (numRows*lie1-1)) && (i0<h2); count++) { if (i == 0 ) { //如果行数等于列数就往下加 for (int ii = 0; (ii < numRows) && (i0<h2) && (j<(lie1)); ii++) { ret[ii][j] = s[i0]; i0++; } i = numRows - 1; j++; } if (i == (numRows - 1)) { for (int ii = numRows - 2; (ii >= 1) && (i0<h2) &&(j<(lie1)); ii--) { ret[ii][j] = s[i0]; j++; i0++; } i = 0; } } //将字符串赋值给向量ret string s1; char *c; for (int i1 = 0; i1 < numRows; i1++) { for (int j1 = 0; j1 < (lie1 ); j1++) { if (ret[i1][j1] != '\0') { c = &(ret[i1][j1]); s1.append(c, 1); //每次都将值赋给字符串 } cout << ret[i1][j1]; } cout << endl; } return s1; } }; void main() { Solution A; string a1 = "A"; string b; b = A.convert(a1, 1); int h1 = b.length(); cout << b<<endl; system("pause"); }