ZigZag Conversion

来源:互联网 发布:淘宝详情页免费模板 编辑:程序博客网 时间:2024/06/14 09:31

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   NA P L S I I GY   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".

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);}}


0 0
原创粉丝点击