一、原题
The string “PAYPALISHIRING” is written in a zigzag pattern on a given number of rows like this: (you may want to display this pattern in a fixed font for better legibility)
P A H N
APLSIIG
Y I R
And then read line by line: “PAHNAPLSIIGYIR”
Write the code that will take a string and make this conversion given a number of rows:
string convert(string text, int nRows);
convert(“PAYPALISHIRING”,3) should return “PAHNAPLSIIGYIR”
二、中文
输入一个字符串和指定的行数,将字符以Z字型输出。
三、举例
例如输入PAYPALISHIRING,输出是PAHNAPLSIIGYIR
四、思路
(1)首先计算最大的列数,然后根据行数和列数创建一矩阵
(2)循环向这个矩阵中写入字符,根据一列和一斜行的顺序来写入
(3)最后读出矩阵中的字符,其中这个矩阵可以是一个字符串
五、程序
package LeetCode;
public class Leetcode006 {
public static void main(String args[]){
String str = "ABCDEFGHIJKLSJDFLJSLFJLSDJFLKSDJFLSAJFSLD";
// System.out.println(convert(str, 3));
convert(str, 8);
}
/**
* @param 字符串的Z字型输出
* @return
*/
public static void convert(String s, int n) {
int len = s.length();
// 首先计算行的长度,包括最后的换行字符
int slash = n - 2;
int rowLength = 0;
while(len > 0){
//竖列
len = len - n;
rowLength++;
//斜着的一列
for(int i = 0; i < slash && len > 0; i++){
len--;
rowLength++;
}
}
// 建立一个多一列的数组用于保存我们的字符串,并且全部初始化为空格了
char result[] = new char[n * rowLength];
for (int i = 0; i < result.length; i++) { // 初始化为空格
result[i] = ' ';
}
int curColumn = 0; // 当前处理的行数
int index = 0;
// 下面将字符串写入所谓的矩阵中
while(index < s.length()){
//写入列
for(int i = 0; i < n && index < s.length(); i++){
result[rowLength * i + curColumn] = s.charAt(index);
index++;
}
curColumn++;
//写入斜线,这个是难点啊
for(int i = n - 2; i > 0 && index < s.length(); i--){
result[rowLength * i + curColumn] = s.charAt(index);
curColumn++;
index++;
}
}
int flag = 0;
for(int i = 0; i < curColumn; i++){
for(int j =0; j < rowLength; j++){
if(flag < result.length){
System.out.print(result[i * curColumn + j]);
}
flag++;
}
System.out.println();
}
// // 如下是去空格的操作,定义两个指针循环进行操作
// index = 0;
// while (index < s.length() && result[index] != ' ') { // 找第一个是空格的字符位置
// index++;
// }
// int next = index + 1;
// while (index < s.length()) {
// while (next < result.length && result[next] == ' ') { // 找不是空格的元素
// next++;
// }
// result[index] = result[next];
// index++;
// next++;
// }
// return new String(result, 0, index);
}
}