6. ZigZag Conversion

来源:互联网 发布:淘宝规模 编辑:程序博客网 时间:2024/06/06 08:47
 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   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". 

通过画图找规律

/**  由规律来看  第i排开始的数下标是i;  第一排和最后一排 的间距为 2*(N-1);  其他排的间距为 分别是2*(m-i) 2*(i-1)*/#include<iostream>using namespace std;class Solution {public:    string convert(string s, int numRows) {        int length = s.size();        string result;//用于输出排序后的字符串        if ((numRows == 1) || (numRows>=length))            return s;        for (int i = 0; i < numRows; i++)        {            int j = i;            bool flag=true;            while (j < length)            {                result.push_back(s.at(j));//将排好序的字符插入到result中                if (i == 0 || i == numRows - 1)                {                    j += 2 * (numRows - 1);                }                else                {                    if (flag)                    {                        j +=  2 * (numRows - 1-i);                        flag = false;                    }                    else                    {                        j +=  2 * i;                        flag = true;                    }                }            }        }        return result;    }};int main(){    Solution s1;    string result=s1.convert("abcd", 2);    for (int i = 0; i <result.size(); i++)    {        cout << result[i] << ' ';    }    system("pause");}

a c

b d

a c b d 请按任意键继续. . .
原创粉丝点击