LeetCode(6) Z字形轉換

2022-05-07 10:27:11 字數 1542 閱讀 2758

medium!

題目描述:

將字串"paypalishiring"以z字形排列成給定的行數:(下面這樣的形狀)

p   a   h   n

a p l s i i g

y i r

之後按逐行順序依次排列:"pahnaplsiigyir"

實現乙個將字串進行指定行數的轉換的函式:

string convert(string text, int nrows);

convert("paypalishiring", 3)應當返回"pahnaplsiigyir"

題意解釋:

比如有乙個字串 「0123456789abcdef」,轉為zigzag

當 n = 2 時:

0 2 4 6 8 a c e

1 3 5 7 9 b d f

當 n = 3 時:

0   4    8     c

1 3 5 7 9 b d f

2    6   a     e

當 n = 4 時:

0     6        c

1   5 7   b  d

2 4   8 a    e

3      9       f

解題思路:

這道題就是看座標的變化。並且需要分塊處理。

n=2時,字串座標變成zigzag的走法就是:

0   2   4   6

1   3   5   7

n=3時的走法是:

0        4        8

1   3   5   7   9

2        6       10 

n=4時的走法是:

0        6          12

1   5   7   11   13

2   4   8   10   14

3        9          15 

我們發現,除了第一行和最後一行沒有中間形成之字型的數字外,其他都有,而首位兩行中相鄰兩個元素的index之差跟行數是相關的,為 2*nrows - 2, 根據這個特點,我們可以按順序找到所有的黑色元素在元字串的位置,將他們按順序加到新字串裡面。對於紅色元素出現的位置也是有規律的,每個紅色元素的位置為 j + 2*nrows-2 - 2*i, 其中,j為前乙個黑色元素的列數,i為當前行數。 比如當n = 4中的那個紅色5,它的位置為 1 + 2*4-2 - 2*1 = 5,為原字串的正確位置。當我們知道所有黑色元素和紅色元素位置的正確演算法,我們就可以一次性的把它們按順序都加到新的字串裡面。**如下:

1

class

solution 13}

14return

res;15}

16 };

LeetCode6Z字形轉換

將字串 paypalishiring 以z字形排列成給定的行數 下面這樣的形狀 p a h n a p l s i i g y i r之後按逐行順序依次排列 pahnaplsiigyir 實現乙個將字串進行指定行數的轉換的函式 string convert string text,int nrows...

LeetCode(6) Z字形轉換

本文 題目描述 將字串 paypalishiring 以z字形排列成給定的行數 下面這樣的形狀 p a h n a p l s i i g y i r之後按逐行順序依次排列 pahnaplsiigyir 實現乙個將字串進行指定行數的轉換的函式 string convert string text,i...

LeetCode 6 Z字形變換

將字串 paypalishiring 以z字形排列成給定的行數 p a h n a p l s i i g y i r之後從左往右,逐行讀取字元 pahnaplsiigyir 實現乙個將字串進行指定行數變換的函式 string convert string s,int numrows 輸入 s pa...