给定行数,将某字符串转换为zigzag形式,然后按行输出。zigzag形式如:
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".
O(n),遍历每个字符,依次将其加入第m行的字符串中,最后将所有行的字符串组合起来
public class Solution { public String convert( String s, int nRows ){ if( nRows == 1 ) return s; StringBuilder[] res = new StringBuilder[nRows]; for( int i=0; i<nRows; i++ ) res[i] = new StringBuilder(); int loop = 2 * nRows-2; int mid = nRows-1; for( int i=0; i<s.length(); i++ ) res[ mid - Math.abs( i % loop - mid ) ].append(s.charAt(i)); for( int i = 1; i<nRows; i++ ) res[0].append( res[i] ); return res[0].toString(); } }
原文:http://www.cnblogs.com/hf-cherish/p/4572772.html