(LeetCode 6)C++Z字形変換を実現
1083 ワード
タイトルの説明:指定された文字列を指定された行数に基づいて、上から下へ、左から右へZ字形で並べます.(実はN字変換が一番正確だと思います.タイトルの意味は元の文字列をNの順に並べて、最後に出力することです)
例えば、入力文字列が
その後、出力は左から右へ行を追って読み取り、
私の方法は、元の文字列を巡り、対応する行に配置することです.各行は新しい文字列です.上記の例を挙げると、Lは0行目、Eは1行目、2番目のEは2行目、次いで逆順、Tは2行目である.最後に、各行の文字列を結合します.つまり、結果です.
例えば、入力文字列が
"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;
}