日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python实现倒n字形排列_Leetcode问题库——Z形变换(Python),补充X形变换,字形

發(fā)布時(shí)間:2023/12/3 python 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python实现倒n字形排列_Leetcode问题库——Z形变换(Python),补充X形变换,字形 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Z字形變換

題目

將一個(gè)給定字符串根據(jù)給定的行數(shù),以從上往下、從左到右進(jìn)行 Z 字形排列。

比如輸入字符串為 “LEETCODEISHIRING” 行數(shù)為 3 時(shí),排列如下:

之后,你的輸出需要從左往右逐行讀取,產(chǎn)生出一個(gè)新的字符串,比如:“LCIRETOESIIGEDHN”。

請你實(shí)現(xiàn)這個(gè)將字符串進(jìn)行指定行數(shù)變換的函數(shù):

示例 1:

輸入: s = “LEETCODEISHIRING”, numRows = 3

輸出: “LCIRETOESIIGEDHN”

示例 2:

輸入: s = “LEETCODEISHIRING”, numRows = 4

輸出: “LDREOEIIECIHNTSG”

解釋:

解題思路

題目理解:

字符串 s 是以 Z 字形為順序存儲的字符串,目標(biāo)是按行打印。

設(shè) numRows 行字符串分別為 s

1

,s

2

,……,s

n

,則容易發(fā)現(xiàn):按順序遍歷字符串 s 時(shí),每個(gè)字符 c 在 Z 字形中對應(yīng)的 行索引 先從 s

1

增大至 s

n

,再從 s

n

減小至 s

1

…… ,如此反復(fù)。

因此,解決方案為:模擬這個(gè)行索引的變化,在遍歷 s 中把每個(gè)字符填到正確的行 res[ i ] 。

算法流程:

按順序遍歷字符串 s;

res[ i ] += c: 把每個(gè)字符 c 填入對應(yīng)行 s

i

i += flag: 更新當(dāng)前字符 c 對應(yīng)的行索引;

flag = - flag: 在達(dá)到 Z 字形轉(zhuǎn)折點(diǎn)時(shí),執(zhí)行反向。

妙用 flag

代碼實(shí)現(xiàn)如下:

class Solution:

def convert(self, s: str, numRows: int) -> str:

if numRows == 1: return s

res = [''] * numRows# res = ["" for _ in range(numRows)]

k,flag = 1,-1

while s:

if k in [1,numRows]:

flag = -flag

res[k-1] += s[0]

s = s[1:]

k += flag

return ''.join(res)

class Solution:

def convert(self, s: str, numRows: int) -> str:

if numRows < 2: return s

res = ["" for _ in range(numRows)]

i, flag = 0, -1

for c in s:

res[i] += c

if i == 0 or i == numRows - 1: flag = -flag

i += flag

return "".join(res)

X字形變換

題目來自于2020校招華為機(jī)試題

題目

給定一個(gè)僅由大寫字母組成的字符串以及一個(gè)指定的奇列數(shù),按從左到右,從上到下的順序?qū)⒔o定的字符串以X字形排列成指定的列數(shù)。

例如,給定字符串為EVERYTHINGGOESWELL,指定列數(shù)為3,則大X字形排列為:

然后,從上到下逐列讀取上面的大X字形排列,產(chǎn)生一個(gè)新的字符串,如讀取上面的大X字形排列可得目標(biāo)字符串為:ERHGEEETNOWLVYIGSL

解題思路

題目理解

此題跟 Z 字形變換同理,區(qū)別在于,Z 字形變換有順序性,而 X 字形變換具有對稱性,不適合遍歷字符串。

解決方案依舊是模擬行索引的變化,遍歷 strs 中的每個(gè)字符填到正確的行 res[ i ]。

算法流程:

res[ k ] += strs[0] :把字符strs[ 0 ] 填入對應(yīng)的第 k 列,并扔掉strs[ 0 ]

res[n-k-1] += strs[0] :k 沒有走到 mid 位置,將下一個(gè)字符填入對應(yīng)的第 n-k-1 列

flag = -flag :前進(jìn)到起始位置 k=0 或中間位置 mid ,執(zhí)行反向

strs = 'EVERYTHINGGOESWELL'# 給定的字符串

n = 3 # 指定列數(shù)

res = [''] * n

k,flag = 0,-1 # 初始位置,前進(jìn)方向

mid = (n-1) // 2

while strs:

res[k] += strs[0]

strs = strs[1:]

# 如果字符串空了

if not strs: break

# 如果沒有走到中點(diǎn)mid

if k != mid:

res[n-k-1] += strs[0]

strs = strs[1:]

# 改變前進(jìn)方向

if k == mid or k == 0:

flag = -flag

k += flag

print(''.join(res))

另外

除了

Z

字形變換和

X

字形變換外,還可以有

V

字形變換、

N

字形變換等等

總結(jié)

以上是生活随笔為你收集整理的python实现倒n字形排列_Leetcode问题库——Z形变换(Python),补充X形变换,字形的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。