leetcode刷题:The string "PAYPALISHIRING"

来源:互联网 发布:苹果cms解析百度云 编辑:程序博客网 时间:2024/06/08 22:05

题目描述: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”.

Therefore, s = ABCD, row = 2, can be arranged as:
A….C
…B….D

由于原题对于题目描述不太清楚,我照着disscuss里面加了一个例子描述,方便阅读。

首先是我自己的代码:
/****************************************/
string s = “ABC”;
int numRows = 2 ;
if (s.size() == 1)
{
cout << s.size();
return 0;
}
string str;
int num2 = numRows / 2;
char ch[1000][1000];
int row = 0;
int i = 0;
for (int i = 0; i < 200; i++)
{
for (int j = 0; j < 200; j++)
{
ch[i][j] = ’ ‘;
}
}
while (i < s.size())
{

    for (int j = 0; j < numRows; j++, row++) {        ch[j][row] = s[i];        i++;    }}i = 0;while (i<s.size()){    for (int k = 0; k<numRows; k++) {        int j = 0;        int temp = 0;        while(temp < 2) {            if (ch[k][j] == ' ' || ch[k][j] == '\0')            {                j++;                temp++;                continue;            }               else            {                temp = 0;                str += ch[k][j];                i++;                j++;            }        }    }}return str;/*****************************************/写的很烂,思路很简单,就是用一个二维数组模拟一遍题目的转换过程,先竖着存入,然后横着读出,但是应该是由于我的二维数组范围的问题,导致不通过。然后我看了下disscuss里面大神的算法。/******************************************************/string s = "ABC";int nRows = 2 ;for (int i = 0; i < len; ++i){    str[row].push_back(s[i]);    if (row == 0)        step = 1;    else if (row == nRows - 1)        step = -1;    row += step;}s.clear();for (int j = 0; j < nRows; ++j){    s.append(str[j]);}/*****************************************************/代码简洁,思路简单,同样是模拟一个转换的过程,先从第一行开始存,然后行数++,存到最后一行的时候又开始返回往上开始存,行数--,知道s的字符串存完,整个存储过程类似于一个“W”的形状。

菜鸡继续加油。。。

原创粉丝点击