重点需要注意的是对ZigZag这个单词的理解。题目对我们来说需要是对给定的字符串构造之字形
的样式。
如图所示
接下来是我的解答,我的方法是模拟出来对应的样式,然后再遍历进行字符串的拼接
package leetcode;
import java.util.Arrays;
/**
* Created by Joe on 2017/9/12.
*/
public class ZigZagConversion {
public String convert(String s, int numRows) {
if (numRows == 1) {
return s;
}
char[][] content = new char[numRows][];
for (int i = 0; i < numRows; i++) {
content[i] = new char[s.length()];
}
//当前行
int currentRow = 0;
//当前列
int currentCol = 0;
//增长率
int increment = 1;
for (int i = 0; i < s.length(); i++) {
content[currentRow][currentCol] = s.charAt(i);
//如果是刚开始,则需要往下走,增长率置为1
if (currentRow == 0) increment = 1;
//到了底部,需要网上走,增长率置为-1
else if (currentRow == numRows-1) increment = -1;
currentRow += increment;
//如果增长率为-1,则在描绘折现部分,所在列需要自增
if (increment == -1) {
currentCol++;
}
}
StringBuilder builder = new StringBuilder();
for (int i = 0; i < numRows; i++) {
// System.out.println(Arrays.toString(content[i]));
for (int j = 0; j < content[i].length; j++) {
if (content[i][j] != 0) {
builder.append(content[i][j]);
}
}
}
return builder.toString();
}
public static void main(String[] args) {
System.out.println(new ZigZagConversion().convert("ABC", 2));
}
}