leetcode 13:zigzag conversion

来源:互联网 发布:矢量图设计软件 编辑:程序博客网 时间:2024/04/29 07:19

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   NA P L S I I GY   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".

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();    }}


原创粉丝点击