首先來介紹一下題目:
將乙個給定字串根據給定的行數,以從上往下、從左到右進行 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);
示例 1:
輸入: s = 「leetcodeishiring」, numrows = 3
輸出: 「lciretoesiigedhn」
示例 2:
一開始思考這題的方式是一種公式化的方法來思考的,設滿列(即沒有空白字元的列)的列數為x1,則x1=(s-2+r)/(2r-2)+x2;s為給定字串長度,r為行數,x2其實是最後所剩餘字元的個數。但隨著**的進行,發現過程越來越複雜,且複雜度也達到了o(n^2),**最後沒有實現完成,但個人感覺是行得通的。
然後看了網上的兩種方法,並最終實現
#建立二維陣列,空格位置放空白字元
class solution
if(line == 0) //為滿列時(即沒有空白字元的列)
else}}
int ret_len = 0;
for(int m = 0, re=0; m < numrows; m++)}}
result[ret_len] = 0;
return result;
}附上**:
/下面這種其實來自力扣官方給出的,這種方法的核心點在於goingdown,當為滿列時,cutrows處於一種增的狀態,為對角線時,根據goingdown,cutrows處於一種減的狀態,而這種方式巧妙的與vector rows結合,vector中每個元素都為乙個string,第乙個元素string就正好代表了乙個z型變換中的一行,並且完美的過濾掉了空白字元/
class solution
cutrows+=goingdown?1:-1;
}for(string c:rows)
return ret;}};
力扣 Z字形變換
將乙個給定字串根據給定的行數,以從上往下 從左到右進行 z 字形排列。比如輸入字串為 leetcodeishiring 行數為 3 時,排列如下 l c i r e t o e s i i g e d h n 之後,你的輸出需要從左往右逐行讀取,產生出乙個新的字串,比如 lciretoesiiged...
每日一題 LeetCode之Z字形變換
將乙個給定字串根據給定的行數,以從上往下 從左到右進行 z 字形排列。比如輸入字串為 leetcodeishiring 行數為 3 時,排列如下 l c i r e t o e s i i g e d h n之後,你的輸出需要從左往右逐行讀取,產生出乙個新的字串,比如 lciretoesiigedh...
每日刷題 Z 字形變換
將乙個給定字串根據給定的行數,以從上往下 從左到右進行 z 字形排列。比如輸入字串為 leetcodeishiring 行數為 3 時,排列如下 l c i r e t o e s i i g e d h n之後,你的輸出需要從左往右逐行讀取,產生出乙個新的字串,比如 lciretoesiigedh...