qingcheng奕  

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;
}

 

posted on 2014-06-13 21:53  qingcheng奕  阅读(134)  评论(0编辑  收藏  举报