1. 程式人生 > >LeetCode 006 ZigZag Conversion - Java

LeetCode 006 ZigZag Conversion - Java

mil cnblogs isp 字符串 lsi tex version wan app

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