一、题目描述
二、我的解题
class Solution { public String convert(String s, int numRows) { if (numRows==1){ return s; } String[] s1=new String[numRows]; boolean mark=true; int j=0; for (int i=0;i<s.length();i++){ if (s1[j]==null){ s1[j]= String.valueOf(s.charAt(i)); }else s1[j]= s1[j]+ s.charAt(i); if (j==0){ mark=true; } else if (j==numRows-1) { mark=false; } if (mark){ j++; }else j--; } String res=""; for (int i=0;i<s1.length;i++){ if (s1[i]!=null){ res=res+s1[i]; } } return res; } }
这是我的解答,总体来说还不错,就字符串拼接来达到目的。
三、参考改进
class Solution { public String convert(String s, int numRows) { if(numRows < 2) return s; List<StringBuilder> rows = new ArrayList<StringBuilder>(); for(int i = 0; i < numRows; i++) rows.add(new StringBuilder()); int i = 0, flag = -1; for(char c : s.toCharArray()) { rows.get(i).append(c); if(i == 0 || i == numRows -1) flag = - flag; i += flag; } StringBuilder res = new StringBuilder(); for(StringBuilder row : rows) res.append(row); return res.toString(); } }
- 其实思路都差不多,但是很明显这个写法更加高级,且时间复杂度更低,是一段优秀的代码。