將乙個給定字串根據給定的行數,以從上往下、從左到右進行 z 字形排列。
比如輸入字串為 「leetcodeishiring」 行數為 3 時,排列如下:
l c i r
e t o e s i i g
e d h n
之後,你的輸出需要從左往右逐行讀取,產生出乙個新的字串,比如:「lciretoesiigedhn」。
請你實現這個將字串進行指定行數變換的函式:
string convert(string s, int numrows);
輸入: s = "leetcodeishiring", numrows = 3
輸出: "lciretoesiigedhn"
輸入: s = "leetcodeishiring", numrows = 4
輸出: "ldreoeiiecihntsg"
解釋:l d r
e o e i i
e c i h n
t s g
方法一:逐字節讀取字串
假設原字串為「abcdefghijk」
,擺成4行。
我們引入乙個陣列arr,陣列大小為4,接著遍歷字串,設i為字串的下標:
i = 0時,arr[0] = "a";
i = 1時,arr[1] = "b";
i = 2時,arr[2] = "c";
i = 3時,arr[3] = "d";
i = 4時,arr[2] = "ce";
i = 5時,arr[1] = "bf";
……i = 10時,arr[2] = "ceik";
接著逐行讀入arr陣列即可得到答案。
源程式:
class solution
else
} string new_s = "";
for(int i = 0; i < numrows; i++)
return new_s;
}};
方法二:逐行讀入法
假設原字串為「abcdefghijk」,擺成4行。
思路:首先訪問行 0
中的所有字元,接著訪問行 1
,然後行 2
,依此類推…:
設z字返回第一行前所有的數字為一組,該組數字數目為g_length = 2 * numrows -2
;
行0、行numrows - 1:下標為i + g_length * t(t = 0,1,2...)
中間行:下標為i + g_length * t(t = 0,1,2...)和下標為i + g_length * t - 2 * i(t = 1,2...)
class solution {
public:
string convert(string s, int numrows) {
if(numrows == 1)
return s;
int s_length = s.length();
int g_length = 2 * numrows - 2;
string result = "";
for(int i = 0; i < numrows; i++) {
int j = i;
while(j < s_length) {
result += s[j];
j += g_length;
//cout<<"i: "<0 && i < numrows - 1 && j - i * 2 < s_length) {
//cout<<" "《題目相對挺簡單的,繼續coding!
LeetCode C 6 Z 字形變換
將乙個給定字串根據給定的行數,以從上往下 從左到右進行 z 字形排列。比如輸入字串為 leetcodeishiring 行數為 3 時,排列如下 之後,你的輸出需要從左往右逐行讀取,產生出乙個新的字串,比如 lciretoesiigedhn 請你實現這個將字串進行指定行數變換的函式 string c...
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 示例...
6 Z字形變換
將字串 paypalishiring 以z字形排列成給定的行數 p a h n a p l s i i g y i r 之後從左往右,逐行讀取字元 pahnaplsiigyir 示例1 輸入 s paypalishiring numrows 3 輸出 pahnaplsiigyir 示例 2 輸入 s...