题目描述
输入一个宇符串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教你学算法 - 学算法,看我就够了