力扣每日一題「Z字形變換」

2021-10-07 11:01:54 字數 1117 閱讀 2268

首先來介紹一下題目:

將乙個給定字串根據給定的行數,以從上往下、從左到右進行 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...