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 A P L S I I G Y I RAnd 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".
Subscribe to see which companies asked this question
package leetcode;
/**
* 很容易看出外层的循环周期;
* 若s="0123456789",当numRows=3时,打印出 048/159/26
* 当numRows=4时,打印出06/17/28/39
* 故循环周期是cyc=2*numRows-2;
* 对于首行和末行之间的行,期间还有一个周期,这一次距离本周期起始字符的距离是 2*nRows-2-2*i
* @author Mouse
*
*/
public class Solution {
public static String convert(String s, int numRows) {
// 获得s字符串的长度
int len = s.length();
if (len<=2||numRows==1) {
return s;
}
String str="";
int cyc=2*numRows-2;//循环周期
for (int i = 0; i < numRows; i++) {
for (int j = i; j <len; j+=cyc) {
str+=s.charAt(j);
if (i>0&&i<numRows-1) {//非首行和末行时还要加一个
int t=j+cyc-2*i;
if (t<len) {
str+=s.charAt(t);
}
}
}
}
return str;
}
public static void main(String[] args) {
convert("0123456789", 3);
}
}
本文介绍了一种将字符串以Z形方式排列并按行读取的算法实现。通过分析不同行数对字符串排列的影响,提供了Java代码示例,展示了如何根据指定的行数将输入字符串转换为Zigzag模式。
1764

被折叠的 条评论
为什么被折叠?



