题目
题目大意:给定一个字符串和一个数字,将字符串排列成“S”形,数字代表“S”形型高度,最后返回将每一横排相加的字符串。
例如输入
PAYPALISHIRING 4
所以输出应该是
PINALSIGYAHRPI
代码如下
public class Solution {
public String convert(String s, int numRows) {
if(numRows == 1)
return s;
String an = "";//储存最后返回的字符串
String[] str = new String[numRows];//储存“S”形的每一行
for(int i=0;i<numRows;i++)//给字符串数组初始化
str[i] = "";
int r = 0;//控制字符串数组的每一行
int flag = 1;//标记“S”形往上还是往下,即r是加还是减
for(int i = 0;i < s.length();i++){
str[r] = str[r] + s.charAt(i);
//当到字符串数组的开始或者结束时反向,即flag取相反数
if(i != 0 && r == numRows-1 && flag == 1)
flag = 0;
else if(i != 0 && r == 0 && flag == 0)
flag = 1;
if(flag == 1)
r++;
if(flag == 0)
r--;
}
//将字符串数组连接
for(int i=0;i<str.length;i++)
an = an+str[i];
return an;
}
}