Z字形变换 java实现
将字符串 "PAYPALISHIRING"
以Z字形排列成给定的行数:
P A H N A P L S I I G Y I R
之后从左往右,逐行读取字符:"PAHNAPLSIIGYIR"
实现一个将字符串进行指定行数变换的函数:
string convert(string s, int numRows);
示例 1:
输入: s = "PAYPALISHIRING", numRows = 3 输出: "PAHNAPLSIIGYIR"
示例 2:
输入: s = "PAYPALISHIRING", numRows = 4 输出: "PINALSIGYAHRPI" 解释: P I N A L S I G Y A H R P I
class Solution { public String convert(String s, int numRows) { if((s.length()==1)||(numRows==1)||(s==null)) return s; char[] arr=s.toCharArray(); StringBuffer sb=new StringBuffer(arr.length); int step=2*numRows-2;//每个满列之间的差值 int row=0; int current=row; int currentNeibor=0; //第一行 for (int i=0;i<arr.length;i+=step) {sb.append(arr[i]);} row++; //中间行 for(;row<numRows-1;row++) { current=row; while(current<arr.length) { sb.append(arr[current]); currentNeibor=current+step-2*row; if (currentNeibor<arr.length) sb.append(arr[currentNeibor]); current=current+step; } } //最后一行 for(;row<arr.length;row+=step) {sb.append(arr[row]);} return sb.toString(); } }