DAY5:leetcode #6 ZigZag Conversion

本文详细阐述了如何使用Python实现将普通字符串转换为指定行数的Zigzag模式,并提供了一个实例演示。

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

Subscribe to see which companies asked this question

第五道题没看懂题意,先跳过去了,以后有空再做。

class Solution(object):
    def convert(self, s, numRows):
        """
        :type s: str
        :type numRows: int
        :rtype: str
        """
        result = []
        if numRows == 1:
            return s
        SIZE = 2 * numRows - 2
        for i in range(numRows):
            if i == 0:        #第一行,只输出竖着的一列第一个
                j = 0
                while True:
                    if j <len(s):
                        result.append(s[j])
                        j += SIZE
                    else:
                        break
            elif i == numRows - 1:    #最后一行,只输出竖着的一列最后一个
                j = numRows - 1
                while True:
                    if j <len(s):
                        result.append(s[j])
                        j += SIZE
                    else:
                        break
            else:          #其他,输出本列对应位置和斜着的对应部分
                j1 = i
                j2 = SIZE - i
                while True:
                    flag = False
                    if j1 <len(s):
                        result.append(s[j1])
                        j1 += SIZE
                        flag = True
                    if j2 <len(s):
                        result.append(s[j2])
                        j2 += SIZE
                        flag = True
                    if not flag:
                        break
        return ''.join(result)
                    

这道题其实不难,静下心找到原来的数组下标和新的数组下标之间的变换关系,写出程序来基本就一遍通了。

记得判断一下numRows是否等于1,以防程序bug。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值