LeetCode算法题——ZigZag Conversion

来源:互联网 发布:pr软件图标 编辑:程序博客网 时间:2024/06/06 00:23
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   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"

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;
    }
0 0