Problem:
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".Analysis:
For the first and the last rows, the period between tow items is 2nRow-2(Step). For other rows, the period changes after every step. The first period is 2(nRows-1-rowIndex)(Step1), the second period is Step-Step1.
Solution:
1: public class Solution {
2: public String convert(String s, int nRows) {
3: if(nRows==1)
4: return s;
5: StringBuilder sb=new StringBuilder();
6: int step=2*nRows-2;//the period on the first and the last rows
7: for(int i=0;i<nRows;i++)
8: {
9: if(i==0 || i==nRows-1)//first row or last row
10: {
11: for(int j=i;j<s.length();j+=step)
12: {
13: sb.append(s.charAt(j));
14: }
15: }
16: else
17: {
18: int j=i;
19: int substep=2*(nRows-1-i);
20: while(j<s.length())
21: {
22: sb.append(s.charAt(j));
23: j+=substep;
24: substep=step-substep;
25: }
26: }
27: }
28: return sb.toString();
29: }
30: }
没有评论:
发表评论