leetcode 6 : ZigZag Conversion

来源:互联网 发布:python list length 编辑:程序博客网 时间:2024/06/07 05:25

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".

思路:


1.Z字形的数,第一行和最后一行要单独考虑,中间行需要找规律。

2.


首先可以发现需要用循环来解决。第一行中,下一个数字是7,是第1+3列,第二行中,下一个数字是6,是2+2列,依次类推发现了列的关系是(numRows-1-i)*2

而且还应该是一个列的循环,所以还要定义一个参数j=i。

第一行的规律是:

1 = j

7 = j+  (numRows-1-i)*2 = 1+(5-1-1)*2 = 7 

 j = j+   (numRows-1)*2

9 = j

15 = j+   (numRows-1-i)*2 =9+(5-1-1)*2=15

下面的每一行依次类推。


代码:

public class Solution {  public String convert(String s, int numRows) {if (s == null || s.length() <= numRows || numRows <= 1) return s;StringBuffer sb=new StringBuffer();//line 1    for(int i=0;i<s.length();i+=2*(numRows-1)) sb.append(s.charAt(i));    //line middle    for(int i=1;i<numRows-1;i++){    for(int j=i;j<s.length();j+=(numRows-1)*2){    sb.append(s.charAt(j));    if((j+(numRows-1-i)*2)<s.length()) sb.append(s.charAt(j+(numRows-1-i)*2));    }    }    //line last    for (int i = numRows - 1; i < s.length(); i += (numRows - 1) * 2)   sb.append(s.charAt(i));return sb.toString();    }}



0 0
原创粉丝点击