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"
.
Ref:http://blog.unieagle.net/2012/11/08/leetcode%E9%A2%98%E7%9B%AE%EF%BC%9Azigzag-conversion/
public class Solution { public String convert(String s, int nRows) { if (s == null || s.length() == 0 || nRows <= 1) return s; StringBuilder ret = new StringBuilder(); int zigsize = 2*nRows -2; for(int i = 0; i<nRows; ++i){ for(int base = i; ; base += zigsize){ if(base >= s.length()) break; ret.append(s.charAt(base)); if(i>0 && i < nRows-1){ int ti = base+zigsize -2*i; if(ti < s.length()) ret.append(s.charAt(ti)); } } } return ret.toString(); } }
原文:http://www.cnblogs.com/RazerLu/p/3552019.html