题目描述
输入一个宇符串s和正整数numRows,对宇符串s按规则进行波形排列,然后按规则输出新的宇符串。
波形排列规则如下:
1.波峰和波谷的宽度固定为3;
2.波形高度为rowNums;
3.从左到右,从下到上排列rowNums个宇符,从在到右排列3个宇符,从下到上rowNums个字符,以此类推。
宇符串输出规则:
从上到下逐行读取,每行从左到右读取。
| 例如,输入“ABCDEFGHIJKLMNOPQ”3,则排列形状如下:
 E F G   M N O
 D   H   L   P
 A B C   I J K   Q
 输出
 "EFGMNODHLPABCIJKQ"
 
 | 
 代码实现
| class Solution{public String convert(String str, int numRows){
 int len = str.length();
 if(len < 3)return str;
 int i = 0;
 String[] waves = new String[numRows];
 while(i < len){
 for(int k = 0; k < 2 && i < len; i++, k++){
 if(waves[numRows - 1] == null){
 waves[numRows - 1] = Character.toString(str.charAt(i));
 }else{
 waves[numRows - 1] += str.charAt(i);
 }
 }
 for(int j = numRows - 1; j > 0 && i < len; i++, j--){
 if(waves[j] == null){
 waves[j] = Character.toString(str.charAt(i));
 }else{
 waves[j] += str.charAt(i);
 }
 }
 for(int k = 0; k < 2 && i < len; i++, k++){
 if(waves[0] == null){
 waves[0] = Character.toString(str.charAt(i));
 }else{
 waves[0] += str.charAt(i);
 }
 }
 for(int j = 0; j < numRows - 1 && i < len; i++, j++){
 if(waves[numRows - 1] == null){
 waves[j] = Character.toString(str.charAt(i));
 }else{
 waves[j] += str.charAt(i);
 }
 }
 }
 StringBuilder sb = new StringBuilder();
 for(int ii = 0; ii < numRows; ii++){
 sb.append(waves[ii]);
 }
 return sb.toString();
 }
 }
 
 | 
 参考
jiankychen教你学算法 - 学算法,看我就够了