馬さんとアルゴリズムを勉強します.06


馬さんに従ってLeetCodeの計算方法を使って、自分もついでに考えを整理します.こちらは馬さんのコラムです.馬志峰さんのプログラミングノートです.
テーマは06 ZigZig Coversionです.
与えられた文字列をN行に並べて出力します.個人は比較的に馬鹿で、直接テーマによって言います.ここで1~16の例をあげます.
1
7
13
2
6
8
12
14
3
5
9
11
15
4
10
16
Zタイプで出力すると1 7 13 2 6 8 12 14 5 9 11 15 4 10 16になります.内在する規則を考慮せずに、直接第一列から見ると、数字は列の増加とともに増加し、最後の行すなわち第四行になると、5は斜め上になり、数字は列の減少とともに増大する.ポイントはどのように定義して増加し、いつ定義が減少しますか?
最初の行に数字があると増加し始め、4行目になると減少します.C++の中では0行目から始まるので、反対に3行目から減少します.
class Solution {
public:
    string convert(string s, int numRows) {

    }
};
leetcodeの定義はこのようです.ですから、先ほどの思想に基づいて書いたキーコードです.
 vector<string> vecstring(numRows);  //  numRows  String
    int row = 0;
    bool change = true;
    for(auto c : s)
    {
        auto &cstring = vecstring[row];  
        cstring = cstring + c;   //            string 。

        if(row == 0)
        {
            change = true;
        }

        if(numRows - 1 == row)
        {
            change = false;
        }

        change ? (++row) : (--row);    //           ++row  ,             --row                                       //  ,   row 0     ++row  

   }
コードもポニーを参考にしていますが、これまでは分かりませんでした.
  if(numRows - 1 == row)
        {
            change = false;
        }
change ? (++row) : (--row);
後になって、自分の理解が間違っていたことに気づきました.検索するたびにif(numRows-1=row)を判断します.実は偽と判断した時はずっと(–row)の操作をしています.
すべてのコードは以下の通りです.
class Solution {
public:
    string convert(string s, int numRows) {
        if(numRows == 1)
        {
            return s;
        }
    vector<string> vecstring(numRows);
    int row = 0;
    bool change = true;
    for(auto c : s)
    {
        auto &cstring = vecstring[row];
        cstring = cstring + c;

        if(row == 0)
        {
            change = true;
        }

        if(numRows - 1 == row)
        {
            change = false;
        }

        change ? (++row) : (--row);


    }
    string sResult;
    for(auto b : vecstring)    //      string,         sResult 。
    {
        sResult += b;
    }
    return sResult;
    }
};
この問題にはもう一つの考えの解法があります.
0
4
8
1
3
5
7
9
2
6
10
0
6
12
1
5
7
11
13
2
4
8
10
14
3
9
15
各満列間の数字の間隔は2*(numRow-1)です.中間行間の間隔は2*(numRow-1)-2*iである.
具体的な計算方は參考します.http://blog.csdn.net/gg543012991/article/details/53192501;
自分もプログラミングというものに触れたばかりで、シロとしては自分の考えを書いているだけです.