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"
.
public class Solution { public String convert(String s, int nRows) { if(nRows<=1 || s.length()<=nRows) return s; int len = s.length(); StringBuilder sb = new StringBuilder(); for(int i=0; i<nRows; i++) { int j=i; while(j<len) { sb.append(s.charAt(j)); if(i!=0 && i!=nRows-1) { if(j + 2*(nRows-1-i) < len) sb.append(s.charAt(j + 2*(nRows-1-i) ) ); } j += 2*(nRows-1); } } return sb.toString(); } }
class Solution { public: string convert(string s, int nRows) { // Start typing your C/C++ solution below // DO NOT write int main() function int pattern_size = (nRows-1) * 2; string rel; const int len = s.size(); //first line for( int i=0; i<len; i+=pattern_size){ rel.push_back( s[i]); } //middle lines; for( int i=1; i< nRows-1; i++){ for( int j=i; j<len; j+=pattern_size ) { rel.push_back( s[j] ); int k = j+(nRows-1-i)*2; if(k<len) { rel.push_back( s[k] ); } } } //last line; for( int i=nRows-1; i<len; i+=pattern_size ) { rel.push_back( s[i] ); } return rel; } };
public class Solution { public String convert(String s, int nRows) { // Start typing your Java solution below // DO NOT write main() function if(s==null) return null; int sz = s.length(); if(nRows<=1) return s; //int i=0; StringBuilder sb = new StringBuilder(); for(int i=0; i<nRows; i++) { int j=i; while(j<sz) { sb.append( s.charAt(j) ); if( (i% (nRows-1)) != 0) { int k = j + (nRows-1-i)*2; //define new int k and save the old value in j for next loop if(k<sz) sb.append(s.charAt(k) ); //must check k<sz; may be exceed string length. } j+=2*(nRows-1); } } return sb.toString(); } }