一、题目:6. N 字形变换
二、题目解析:
以Z字形存储的字符串要求我们按照按行打印
遍历字符串s中的每个字符,定义一个变量 flag 用来控制第一行到给定的行之间来回往返,
一开始它等于-1,当它碰到指定的行数后变为1 。
三、代码如下:
public String convert(String s, int numRows) {
//行数小于1则直接返回
if(numRows < 2) return s;
//存储结果
List<StringBuilder> rows = new ArrayList<StringBuilder>();
//初始化
for(int i = 0; i < numRows; i++) {
rows.add(new StringBuilder());
}
//定义变量i模拟行坐标变化,变量flag控制方向
int i = 0, flag = -1;
//遍历字符串中的字符
for(char c : s.toCharArray()) {
//添加到每一行
rows.get(i).append(c);
//判断第一行和最后一行,调整行坐标方向 向下或向上
if(i == 0 || i == numRows -1) {
flag = - flag;
}
//行坐标向下或向上
i += flag;
}
//保存结果
StringBuilder res = new StringBuilder();
//拼接结果
for(StringBuilder row : rows) res.append(row);
return res.toString();
}
四、测试:
五、结束