python实现zigzag_【leetcode】ZigZag Conversion Python

Problem:

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

思路:

列表flag:记录每一行的字符串

变量i:标记当前字符应该处在的行数

dire:变量i的变化方向,如果触及边界(0和nRows)则dire=-dire

sf:每一行的字符串相加后的最终解

一重循环,时间复杂度O(n)

核心思想:用字符串列表代替二维列表,既解决了空格问题也解决了空间问题。(如果用原字符串和目标字符串之间的数学关系解决,应该也是O(n)而且占用空间小,网上有)

代码如下:

class Solution:

# @return a string

def convert(self, s,

nRows):

sf,dire='',1

flag=['' for i in range(nRows)]

if

nRows==1:

return s

i=0

for k

in range(len(s)):

flag[i]+=s[k]

if (i==0 and k!=0)or

(i==nRows-1):

dire=-dire

i+=dire

for j

in range(nRows):

sf+=flag[j]

return

sf

Runtime:175ms

ps:在leetcode上同样算法python比cpp慢很多,所以只和同类比就好了,c++我没学过,有兴趣的朋友可以用这个方法试一下cpp

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值