1、题目
将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。
2、代码实现
核心思想:
主要是分层处理思想,通过求余“%”来实现分层,用StringBuilder数组来存储各个层次的元素,最后,分层存储结束后,逐层输出元素。
class Solution {
public String convert(String s, int numRows) {
//如果一行,直接返回
if(numRows <= 1){
return s;
}
StringBuilder[] sb = new StringBuilder[numRows];
//创建存储空间
for(int i = 0; i < sb.length; i++){
sb[i] = new StringBuilder();
}
//分层处理
for(int i=0; i < s.length(); i++){
//2*numRows -2是每个层次顺序元素的间隔
int index = i % (2*numRows -2);
//在index小于行数numRows,则直接index;否则换算;这里的index是层数,层数以1开始。
index = index < numRows?index : 2*numRows -2-index;
//每层加入相应的元素
sb[index].append(s.charAt(i));
}
//依次输出每层元素到sb[0]中
for(int i = 1;i < sb.length; i++){
sb[0].append(sb[i]);
}
//返回
return sb[0].toString();
}
}