您的位置:首页 > 其它

LeetCode算法题——ZigZag Conversion

2017-03-09 21:46 232 查看
Description:
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   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"


Zigzag:即循环对角线结构(
0   8   16   
1  79  1517   
2 6 10 14 18   
35  1113  19   
4   12   20   


算法思想:
向下循环
斜对角循环:gap=nRows-2(去除端点)

C++ Implements:
string convert(string s, int numRows) {
        if(numRows==1) return s;
        string str[numRows];
        int i=0,gap=numRows-2;
        while(i<s.size()){
            for(int j=0;j<numRows&&i<s.size();j++){
                str[j]+=s[i++];
            }
            for(int j=gap;j>0&&i<s.size();j--){
                str[j]+=s[i++];
            }
        }
        string res="";
        for(int j=0;j<numRows;j++){
            res+=str[j];
        }
        return res;
    }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode 算法 ZigZag