LeetCode探索之旅2(90)-6ZigZag conversion

博客记录刷LeetCode第6题,将字符串用之字型表示。通过找规律发现每次叠加的下标与行数有关,提出用Python实现的问题并需注意下标,还附上了C++和Python代码。

今天继续刷LeetCode,第6题,将字符串用之字型表示。

分析:
通过找规律,发现每次叠加的下标与行数有关。

问题:
1、Python实现;
2、注意下标;

附上C++代码:

class Solution {
public:
    string convert(string s, int numRows) {
        string ret(s.length(), ' ');
        if (numRows > 1)
        {
                int step = (numRows - 1) * 2;
                int counter = 0;
                for (int j = 0; j < numRows; j++)
                {
                    for (int i = j; i < s.length(); i = i + step)
                    {
                        ret[counter] = s[i];
                        ++counter;
                        int offset = step - j * 2;
                        if (offset > 0 && offset < step)
                        {
                            int pos = offset + i;
                            if (pos < s.length())
                            {
                                ret[counter] = s[pos];
                                ++counter;
                            }
                        }
                    }
                 }
        } else {
                ret = s;
        }
        return ret;
    }
};


附上Python代码:

class Solution:
    def convert(self, s: str, numRows: int) -> str:
        if numRows == 1:
             return s
        zigzag = ['' for i in range(numRows)]  # 初始化zigzag为['','','']
        row = 0                                # 当前的行数
        step = 1                               # 步数:控制数据的输入
        for c in s:
            if row == 0:
                step = 1
            if row == numRows - 1:
                step = -1
            zigzag[row] += c
            row += step
        return ''.join(zigzag)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值