力扣top热题100道中第六道,求解将一个输入的字符串s,由上到下排列的输入读取方式,然后自左向右进行遍历输出。
输入的字符串排列类似一个倒N型。
?
?
public String convert(String s, int numRows) {
if(s==null||numRows<=1) return s;
StringBuilder[] arr=new StringBuilder[numRows];
// 初始化数组
for(int i=0;i<arr.length;i++)
{
arr[i]=new StringBuilder();
}
int dir=1;//dir的作用就是让遍历字符串s时,当index等于0时dir=1,使数组往后移,当index等于numRows-1时,dir=-1,让数组可以先前移动。
int index=0;//index是索引值
// 使用for的加强遍历循环,来一个个遍历添加s字符串中的字符
for (char c:s.toCharArray()) {
arr[index].append(c);
index += dir;
if (index == 0 || index == numRows - 1) {
dir = -dir;
}
}
// 最后创建一个StringBuilder类的对象,来输出arr数组中的字符串。
StringBuilder result=new StringBuilder();
for(int i=0;i<arr.length;i++)
{
result.append(arr[i]);
}
return result.toString();
}
// 下面是用来检验是否可以成功运行将从上往下、从左到右进行 Z 字形排列的例子,如果打算将代码拿到leetcode上面进行运行试验,则不需要复制以下代码.
public static void main(String[] args)
{
Solution sol=new Solution();
System.out.println(sol.convert("PAYPALISHIRING",3));
}
?以上解题代码有借鉴参考与leetcode题解视频。
不过根据leetcode题解视频,有一个就是关于为创建的StringBuilder数组长度为是numRows的值。这个地方卡了我比较久的时间,最后想明白了。其实就创建的StringBuilder数组中,每一个数组arr[i]中放的数据类型是String类型,而不是char类型。就是相当于存放的数据不是字符串,而是单个字符,像上面第二张图片那样的情况。
|