LeetCode Online Judge 题目C# 练习 - ZigZag Conversion
The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows like this: (you may want to display this pattern in a fixed font for better legibility)
P A H N
A P L S I I G
Y I R
And then read line by line: "PAHNAPLSIIGYIR"
Write the code that will take a string and make this conversion given a number of rows:
string convert(string text, int nRows);
convert("PAYPALISHIRING", 3) should return "PAHNAPLSIIGYIR".
1 public static string ZigZagConversion(string s, int nRows) 2 { 3 if (nRows == 1) 4 return s; 5 6 int currRow; 7 bool goDown; 8 string ret = ""; 9 10 for (int r = 1; r <= nRows; r++) 11 { 12 currRow = 1; 13 goDown = true; 14 for (int i = 0; i < s.Length; i++) 15 { 16 if (currRow == r) 17 ret += s[i]; 18 19 if (currRow != nRows && goDown) 20 currRow++; 21 else if (currRow == nRows) 22 { 23 currRow--; 24 goDown = false; 25 } 26 else if (currRow != 1 && !goDown) 27 currRow--; 28 else if (currRow == 1) 29 { 30 currRow++; 31 goDown = true; 32 } 33 } 34 } 35 36 return ret; 37 }
代码分析:
分几行就撸几次,每次都从头到尾撸string s 一次。 一个currRow,每当currRow hit 当前的行r, ret += s[i]; 一个goDown flag 看着currRow该++还是--;
马勒隔壁,终于完了。