LeetCode算法題——ZigZag Conversion

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     7 9     15 17      
2   6   10   14   18      
3 5     11 13     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;
    }
發佈了34 篇原創文章 · 獲贊 1 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章