首页 > 代码库 > LeetCode 006 ZigZag Conversion - Java

LeetCode 006 ZigZag Conversion - Java

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      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型排列后,重新读取,可以发现每个字符出现的位置都是有规律的,对于n高度的Z型,出现在Z中同一位置的字符/((n-1)/2)的余数是相同的,这样不考虑n=1,如果为1新字符串是与原字符串相同的。

 

Java实现如下:

 1 public class Solution {
 2     public String convert(String s, int numRows) {
 3         int len=s.length();
 4         if(numRows==1){
 5             return s;
 6         }
 7         int gay=numRows*2-2;
 8         StringBuffer stringBuffer=new StringBuffer();
 9         int j,h;
10         j=0;
11         while(j<len){
12             stringBuffer.append(s.charAt(j));
13             j+=gay;
14         }
15         for(int i=1;i<gay/2;i++){
16             j=i;
17             h=gay-i;
18             while(j<len){
19                 stringBuffer.append(s.charAt(j));
20                 j+=gay;
21                 if(h<len){
22                     stringBuffer.append(s.charAt(h));
23                     h+=gay;
24                 }
25             }
26         }
27         j=numRows-1;
28         while(j<len){
29             stringBuffer.append(s.charAt(j));
30             j+=gay;
31         }
32         return stringBuffer.toString();
33     }
34 }

LeetCode 006 ZigZag Conversion - Java