1. public class Solution {
    2. public string Convert(string s, int numRows) {
    3. int n = s.Length, r = numRows;
    4. if (r == 1 || r >= n) {
    5. return s;
    6. }
    7. int t = r * 2 - 2;
    8. int c = (n + t - 1) / t * (r - 1);
    9. char[][] mat = new char[r][];
    10. for (int i = 0; i < r; ++i) {
    11. mat[i] = new char[c];
    12. }
    13. for (int i = 0, x = 0, y = 0; i < n; ++i) {
    14. mat[x][y] = s[i];
    15. if (i % t < r - 1) {
    16. ++x; // 向下移动
    17. } else {
    18. --x;
    19. ++y; // 向右上移动
    20. }
    21. }
    22. StringBuilder ans = new StringBuilder();
    23. foreach (char[] row in mat) {
    24. foreach (char ch in row) {
    25. if (ch != 0) {
    26. ans.Append(ch);
    27. }
    28. }
    29. }
    30. return ans.ToString();
    31. }
    32. }