• 【ZigZag Conversion】cpp


    题目:

    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".

    代码:

    class Solution {
    public:
        string convert(string s, int numRows) {
                const int len = s.size();
                if ( len<numRows || numRows==1 ) return s;
                vector<char> ret;
                const int INTERVAL = 2*numRows-2;
                for ( int i=0; i<numRows; ++i )
                {
                    int interval = 2*(numRows-i)-2;
                    for ( int j=i; j<len; interval=INTERVAL-interval)
                    {
                        ret.push_back(s[j]);
                        j = (interval==INTERVAL||interval==0) ? j+INTERVAL : j+interval;
                    }
                }
                return string(ret.begin(),ret.end());
        }
    };

    tips:

    找到ZigZag每行元素在元字符串s中间隔大小的规律。

    =======================================

    第二次过这道题,思路还是第一次的思路,但是代码不如第一次简洁了。

    class Solution {
    public:
        string convert(string s, int numRows) {
                vector<char> ret;
                if ( numRows==1 ) return s;
                const int interval = 2*(numRows-1);
                for ( int i=0; i<numRows; ++i )
                {
                    int j = i;
                    int preInterval = 2*i;
                    while ( j<s.size() )
                    {
                        ret.push_back(s[j]);
                        if ( preInterval!=0 && preInterval!=interval )
                        {
                            j = j + interval - preInterval;
                            preInterval = interval - preInterval;
                        }
                        else
                        {
                            j = j + interval;
                        }
                    }
                }
                return string(ret.begin(),ret.end());
        }
    };
  • 相关阅读:
    【Win10开发】相对布局——RelativePanel控件
    【Win10开发】关于AutoSuggestBox
    【Win10开发】自定义标题栏
    线上服务器CPU100%排查
    Rest接口单元测试
    hibernate validator参数校验&自定义校验注解
    JsonView视图
    跨域(SpringBoot)
    Mybatis的分支选择和In循环
    CentOS6.5使用yum安装mysql
  • 原文地址:https://www.cnblogs.com/xbf9xbf/p/4562639.html
Copyright © 2020-2023  润新知