Leetcode- Z 字形变换(6)
生活随笔
收集整理的這篇文章主要介紹了
Leetcode- Z 字形变换(6)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
題目描述
將一個給定字符串 s 根據(jù)給定的行數(shù) numRows ,以從上往下、從左到右進行 Z 字形排列。
比如輸入字符串為 “PAYPALISHIRING” 行數(shù)為 3 時,排列如下:
P A H N
A P L S I I G
Y I R
之后,你的輸出需要從左往右逐行讀取,產(chǎn)生出一個新的字符串,比如:“PAHNAPLSIIGYIR”。
請你實現(xiàn)這個將字符串進行指定行數(shù)變換的函數(shù):
string convert(string s, int numRows);
輸入:s = “PAYPALISHIRING”, numRows = 3
輸出:“PAHNAPLSIIGYIR”
解題思路
1.如果這個行數(shù)是沒有從超過三行,那么直接返回這個字符串就行了,即
2.其實我們就是按行來放,那我們也按行來放入對應的數(shù)組里就是了,即就是第一行的我們就放進
res[0],第二行放進res[1]…以此類推
但是我們要考慮Z字形,即到頭了,要換行的,即當i = 0 或者 i = numRows -1 的時候要換行
我們可以用flag 來表示,即當需要換行,我們讓flag = - flag
3.最后把字符串加在一起就是 最后得到的字符串了
算法流程
res[i] += c: 把每個字符 c 填入對應行 ; i += flag: 更新當前字符 c 對應的行索引; flag = - flag: 在達到 Z 字形轉(zhuǎn)折點時,執(zhí)行反向。代碼
Java
Python
class Solution:def convert(self, s: str, numRows: int) -> str:if numRows < 2:return si,flag = 0,-1res = ["" for _ in range(numRows)]for c in s:res[i] += cif i == 0 or i == numRows -1:flag = -flagi += flagreturn "".join(res)總結(jié)
以上是生活随笔為你收集整理的Leetcode- Z 字形变换(6)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Leetcode-翻转图像(832)
- 下一篇: Leetcode-转置矩阵(867)