第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定

[LeetCode 程序員修煉內(nèi)功系列] 6. ZigZag Conversion 題解

问题描述

字符串 "PAYPALISHIRING" 写成指定行数的 zigzag 模式如下,它很像一个字符串在走 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

问题难度

Medium

解题思路

这道题虽然是中等难度,但实际上解起来很简单,按题目要求,需要把原字符串按一定规则拆成 n 个子字符串,再将这 n 个子字符串首尾相连即可。

接下来就是如何拆原字符串的问题了,直接看上面的例子也许更容易些

原字符串: PAYPALISHIRING
行数: 4
拆分结果: 
[0]: P     I    N
[1]: A   L S  I G
[2]: Y A   H R
[3]: P     I

上面的 4 个子字符串分别用序号 0-4 表示,接下来我们再把该序号标记到到原字符串中,每个字符对应一个序号

PAYPALISHIRING
01232101232101

发现规律了吧,于是我们可以写一个程序,为原字符串中的每个字符标记其所属的子字符串的序号,然后再根据该序号来构建 n 个子字符串,最后将它们按照升序的顺序首位相连。

这样做的时间复杂度和空间复杂度都是 O(n),代码如下:

def convert(self, s, numRows):
    """
    :type s: str
    :type numRows: int
    :rtype: str
    """
    index = 0
    sign = 1
    zigzag_array = []
    for c in s:
        if index == 0:
            sign = 1
        elif index == numRows - 1:
            sign = -1
        if len(zigzag_array) < index + 1:
            zigzag_array.append("")

        zigzag_array[index] += c
        index += sign
    return "".join(zigzag_array)
點擊查看更多內(nèi)容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優(yōu)惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號

舉報

0/150
提交
取消