空等闲

导航

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");

}

 

posted on 2016-12-28 22:00  空等闲  阅读(128)  评论(0编辑  收藏  举报