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".| 0 | 8 | 16 | |||||||||
| 1 | 7 | 9 | 15 | 17 | |||||||
| 2 | 6 | 10 | 14 | 18 | |||||||
| 3 | 5 | 11 | 13 | 19 | |||||||
| 4 | 12 | 20 | 
  | 
| 0 | 8 | 16 | |||||||||
| 1 | 7 | 9 | 15 | 17 | |||||||
| 2 | 6 | 10 | 14 | 18 | |||||||
| 3 | 5 | 11 | 13 | 19 | |||||||
| 4 | 12 | 20 | 
  | 
public class Solution {
    public String convert(String s, int numRows) {
        if(numRows==1)return s;
        char[] chs=s.toCharArray();
        if(numRows==2){
            int index=0;
            for(int i=0;i<s.length();i=i+2)chs[index++]=s.charAt(i);
            for(int i=1;i<s.length();i=i+2)chs[index++]=s.charAt(i);
            return new String(chs);
        }
        char[][] map = new char[numRows][s.length()];
        int index=0,col=0;
        while(index<s.length()){
            if(col%2==1){
                int i=numRows-2;
                while(i>=1 && index<s.length())map[i--][col]=s.charAt(index++);
            }else{
                int i=0;
                while(i<numRows && index<s.length())map[i++][col]=s.charAt(index++);
            }
            col++;
        }
        index=0;
        for(int i=0;i<numRows;i++){
            for(int j=0;j<col;j++){
                if(map[i][j]!=0)chs[index++]=map[i][j];
            }
        }
        return new String(chs);
    }
}C语言源代码(用时79ms):char* convert(char* s, int numRows) {
    char* ch;
    char map[1000][1000];
    int length=0,index=0,i,j,k;
    if(numRows<=1)return s;
    for(i=0;s[i];i++)length++;
	ch = (char*)malloc(sizeof(char)*length*2);
    if(numRows==2){
        for(i=0;i<length;i=i+2)ch[index++]=s[i];
        for(i=1;i<length;i=i+2)ch[index++]=s[i];
        ch[index]=0;
        return ch;
    }
	for(i=0;i<numRows;i++){
		for(j=0;j<length;j++){
			map[i][j]=0;
		}
	}
    i=0,j=0,index=0;
    while(s[index]){
        if(j%2){
            i=numRows-2;
            while(i>=1 && s[index])map[i--][j]=s[index++];
        }else{
            i=0;
            while(i<numRows && s[index])map[i++][j]=s[index++];
        }
        j++;
    }
    index=0;
    for(i=0;i<numRows;i++){
        for(k=0;k<j;k++){
            if(map[i][k]!=0)ch[index++]=map[i][k];
        }
    }
    ch[index]=0;
    return ch;
}C++源代码(用时112ms):class Solution {
public:
    string convert(string s, int numRows) {
        if(numRows==1)return s;
        string chs=string(s);
        int index=0;
        if(numRows==2){
            for(int i=0;i<s.size();i=i+2)chs[index++]=s[i];
            for(int i=1;i<s.size();i=i+2)chs[index++]=s[i];
            return chs;
        }
        char map[1000][1000];
        for(int i=0;i<numRows;i++){
            for(int j=0;j<s.size();j++)
            map[i][j]=0;
        }
        index=0;
        int col=0;
        while(s[index]){
            if(col%2){
                int i=numRows-2;
                while(i>=1 && s[index])map[i--][col]=s[index++];
            }else{
                int i=0;
                while(i<numRows && s[index])map[i++][col]=s[index++];
            }
            col++;
        }
        index=0;
        for(int i=0;i<numRows;i++){
            for(int j=0;j<col;j++){
                if(map[i][j])chs[index++]=map[i][j];
            }
        }
        return chs;
    }
};Python源代码(用时138ms):class Solution:
    # @param {string} s
    # @param {integer} numRows
    # @return {string}
    def convert(self, s, numRows):
        if numRows==1:return s
        res=["" for i in range(numRows)]
        i=0;gap=numRows-2
        while i<len(s):
            j=0
            while i<len(s) and j<numRows:res[j]+=s[i];i+=1;j+=1
            j=gap
            while i<len(s) and j>0:res[j]+=s[i];i+=1;j-=1
        chs=''
        for i in range(numRows):
            chs+=res[i]
        return chsLeetCode 6 ZigZag Conversion (C,C++,Java,Python)
原文地址:http://blog.csdn.net/runningtortoises/article/details/45542565