(LeetCode 6)C++Z字形変換を実現

1083 ワード

タイトルの説明:指定された文字列を指定された行数に基づいて、上から下へ、左から右へZ字形で並べます.(実はN字変換が一番正確だと思います.タイトルの意味は元の文字列をNの順に並べて、最後に出力することです)
例えば、入力文字列が"LEETCODEISHIRING"行数が3の場合、以下のように並べられます.
L   C   I   R
E T O E S I I G
E   D   H   N

その後、出力は左から右へ行を追って読み取り、"LCIRETOESIIGEDHN"などの新しい文字列を生成する必要があります.
私の方法は、元の文字列を巡り、対応する行に配置することです.各行は新しい文字列です.上記の例を挙げると、Lは0行目、Eは1行目、2番目のEは2行目、次いで逆順、Tは2行目である.最後に、各行の文字列を結合します.つまり、結果です.
string convert(string s, int numRows) {
    string result = "";
    if(numRows == 1) return s;
    vector rows(min(numRows, int(s.size())));
    int currRow = 0;
    bool goDown = true;
    for(int i = 0; i < s.length(); i++) {
        rows[currRow] += s[i];
        if(goDown == true) {
            currRow++;
        }
        else
            currRow--;
        if(currRow == numRows - 1 || currRow == 0)//          
            goDown = !goDown;                     //  goDown            
    }
    for(string row : rows)
        result += row;
    return result;
}