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"
.
定位:中等题
题意较好理解,将给的字符串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 }
时间: 2024-10-05 05:01:59