leetcode题目-第六题 Z字形变换

leetcode-cn.com(领扣),一个不错的代码练习网站

第六题    https://leetcode-cn.com/problems/zigzag-conversion/description/


打败 88.15 %选手


题目:

将字符串 "PAYPALISHIRING" 以Z字形排列成给定的行数:

P   A   H   N
A P L S I I G
Y   I   R

之后从左往右,逐行读取字符:"PAHNAPLSIIGYIR"

实现一个将字符串进行指定行数变换的函数:

string convert(string s, int numRows);

示例 1:

输入: s = "PAYPALISHIRING", numRows = 3输出: "PAHNAPLSIIGYIR"

示例 2:

输入: s = "PAYPALISHIRING", numRows = 4输出: "PINALSIGYAHRPI"解释:P     I    N
A   L S  I G
Y A   H R
P     I

我的答案:

class Solution {
public:
    string convert(string s, int numRows)
    {
        if(s.length()==1||s.length()==2||numRows==1){return s;}
        string finals="";
        string out[numRows+1];
        int j=0;
        int i=0;
        int a,b;
        int h=1;
        int l = s.length();
        while(h<=numRows)
        {
            if(h==1)
            {
                for(j=0;(2*numRows-2)*j<=l-1;j++)
                {
                    out[1].append(1,s[(2*numRows-2)*j]);
                }
            }
            else if(h==numRows)
            {
                for(j=0;(2*numRows-2)*j+numRows-1<=l-1;j++)
                {
                    out[numRows].append(1,s[(2*numRows-2)*j+numRows-1]);
                }
            }
            else
            {
                for(j=0;(2*numRows-2)*j<=l-1;j++)
                {
                    a = (2*numRows-2)*j+h-1;
                    b = (2*numRows-2)*(j+1)-h+1;
                    if(a!=b&&a<=l-1&&b<=l-1&&s[a]!='\0'&&s[b]!='\0'){out[h].append(1,s[a]);out[h].append(1,s[b]);}
                    if(a!=b&&a<=l-1&&b>l-1&&s[a]!='\0'){out[h].append(1,s[a]);}                   
                    if(a!=b&&a>l-1){;}
                    if(a==b&&a<=l-1&&b<=l-1&&s[a]!='\0'&&s[b]!='\0'){out[h].append(1,s[a]);}

                }


            }
            h++;
        }
        for(i=2;i<=numRows;i++)
        {out[1]+=out[i];}
        return out[1];
    }
};


打赏

暂无评论

发布评论