本文**:
題目描述:
將字串"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
我們發現,除了第一行和最後一行沒有中間形成之字型的數字外,其他都有,而首位兩行中相鄰兩個元素的index之差跟行數是相關的,為 2*nrows - 2, 根據這個特點,我們可以按順序找到所有的黑色元素在元字串的位置,將他們按順序加到新字串裡面。對於紅色元素出現的位置也是有規律的,每個紅色元素的位置為 j + 2*nrows-2 - 2*i, 其中,j為前乙個黑色元素的列數,i為當前行數。 比如當n = 4中的那個紅色5,它的位置為 1 + 2*4-2 - 2*1 = 5,為原字串的正確位置。當我們知道所有黑色元素和紅色元素位置的正確演算法,我們就可以一次性的把它們按順序都加到新的字串裡面。**如下:
class solution
}} return result;
}};
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字形轉換
medium!題目描述 將字串 paypalishiring 以z字形排列成給定的行數 下面這樣的形狀 p a h n a p l s i i g y i r之後按逐行順序依次排列 pahnaplsiigyir 實現乙個將字串進行指定行數的轉換的函式 string convert string te...
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...