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"
.
这题一上来就蒙,呵呵、、、每次做这种边界index 寻找的题目都很忧伤。。leetcode的 case 太多了。
1 public class Solution { 2 public String convert(String s, int numRows) { 3 if(s == null || s.length() == 1 || numRows == 1) return s; 4 StringBuilder ans = new StringBuilder(); 5 int size = 2*numRows - 2; 6 for(int i = 0; i < numRows; i++){ 7 for(int j = i; j < s.length(); j += size){ 8 ans.append(s.charAt(j)); 9 if(i != 0 && i != (numRows - 1)){// 不在首行和尾行的情况 10 int tmp = j + size - 2*i; 11 if(tmp < s.length()) ans.append(s.charAt(tmp));// 加上中间的字符 12 } 13 } 14 } 15 return ans.toString(); 16 } 17 }