你需要的LeeCode題No.06——“Z字形變換”_一點課堂(多岸學院)
Z字形變換
題目:Z 字形變換
描述:將一個給定字串根據給定的行數,以從上往下、從左到右進行 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:
- 輸入: 輸入: s = "LEETCODEISHIRING", numRows = 4
- 輸出: "LDREOEIIECIHNTSG"
- 解釋:
L D R
E O E I I
E C I H N
T S G
解析
這個題目只需要找好規律,就可以很快解決了。如果記 m=numRows-1,從縱向來看,第一列對應原串的下標就是 0, 1, 2,..., m,例如示例2的LEET四個字元對應的下標就是0, 1, 2, 3。之後的斜線上字元的下標為 m+1, m+2,..., 2m,例如示例2的COD下標就是4, 5, 6。從橫向來看,第一行包含0, 2m, 4m,...等元素,最後一行包含m, 3m, 5m,...等元素,而其餘行例如第二行則還包含一個2m-1, 4m-1,...的值。
掌握了以上規律,我們就可以快速解決此問題,參考程式碼如下:
public String convert(String s, int numRows) { int len = s.length(); if (len == 0 || numRows < 2) return s; int m = numRows - 1; StringBuilder sb = new StringBuilder(); for (int i = 0; i <= m; i++) { for (int j = 0; j < len + m; j += 2 * m) { if (i != 0 && i != m) { if (j >= i && j - i < len) { sb.append(s.charAt(j - i)); } } if (j + i < len) { sb.append(s.charAt(j + i)); } } } return sb.toString(); }
總結
LeetCode上還有類似於此題的簡單題目,接下來的幾個題也是對細緻的考察,這裡就略過了,感興趣的話可以到我的github上檢視程式碼。接下來的題目較為有挑戰性,我們一起來試試吧。
下題預告
題目:正則表示式匹配
描述:給定一個字串 (s) 和一個字元模式 (p)。實現支援 '.' 和 '*' 的正則表示式匹配。
- '.' 匹配任意單個字元。
- '*' 匹配零個或多個前面的元素。
匹配應該覆蓋整個字串 (s) ,而不是部分字串。
說明:
- s 可能為空,且只包含從 a-z 的小寫字母。
- p 可能為空,且只包含從 a-z 的小寫字母,以及字元 . 和 *。
示例 1:
- 輸入: s = "aa", p = "a"
- 輸出: false
- 解釋: "a" 無法匹配 "aa" 整個字串。
示例 2:
- 輸入: s = "aa", p = "a*"
- 輸出: true
- 解釋: '*' 代表可匹配零個或多個前面的元素, 即可以匹配 'a' 。因此, 重複 'a' 一次, 字串可變為 "aa"。
示例 3:
- 輸入: s = "ab", p = ".*"
- 輸出: true
- 解釋: ".* " 表示可匹配零個或多個( '*' )任意字元('.')。
示例 4:
- 輸入: s = "aab", p = "cab"
- 輸出: true
- 解釋: 'c' 可以不被重複, 'a' 可以被重複一次。因此可以匹配字串 "aab"。
示例 5:
- 輸入: s = "mississippi", p = "misisp*."
- 輸出: false
相關原始碼請加QQ獲取。
【感謝您能看完,如果能夠幫到您,麻煩點個贊~】
更多經驗技術歡迎前來共同學習交流: 一點課堂-為夢想而奮鬥的線上學習平臺 http://www.yidiankt.com/
![關注公眾號,回覆“1”免費領取-【java核心知識點】]
QQ討論群:616683098
QQ:3184402434
想要深入學習的同學們可以加我QQ一起學習討論~還有全套資源分享,經驗探討,等你哦!
相關推薦
你需要的LeeCode題No.06——“Z字形變換”_一點課堂(多岸學院)
Z字形變換 題目:Z 字形變換 描述:將一個給定字串根據給定的行數,以從上往下、從左到右進行 Z 字形排列。 比如輸入字
LeetCode演算法題6:Z 字形變換解析
將一個給定字串根據給定的行數,以從上往下、從左到右進行 Z 字形排列。 比如輸入字串為 “LEETCODEISHIRING” 行數為 3 時,排列如下: L C I R E T O E S I I G E D H N 之後,你的輸出需要從左往右逐行讀取,
leetcode演算法題6:Z 字形變換
題目:將一個給定字串根據給定的行數,以從上往下、從左到右進行 Z 字形排列。 比如輸入字串為 "LEETCODEISHIRING" 行數為 3 時,排列如下: L C I R E T O E S I I G E D H N 之後,你
【LeetCode 中等題】4-Z字形變換
宣告: 今天是中等題第4道題。將一個給定字串根據給定的行數,以從上往下、從左到右進行 Z 字形排列。以下所有程式碼經過樓主驗證都能在LeetCode上執行成功,程式碼也是借鑑別人的,在文末會附上參考的部落格連結,如果侵犯了博主的相關權益,請聯絡我刪除 (手動比心ღ( ´・ᴗ・` )
LeetCode-06 Z字形變換
C++版本 class Solution { public: string convert(string s, int numRows) { if (numRows <= 1) return s; string res = ""; int
leetcode刷題6<z字形變換>
image 復雜 style clas round ring 變換 函數 mage 將一個給定字符串根據給定的行數,以從上往下、從左到右進行 Z 字形排列。 比如輸入字符串為 "LEETCODEISHIRING" 行數為 3 時,排列如下: L C I R
[ccf/csp題]201412-2 Z字形掃描
試題編號: 201412-2 試題名稱: Z字形掃描 時間限制: 2.0s 記憶體限制: 256.0MB 問題描述: 問題描述 在影象編碼的演算法中,需要將一個給定的方形矩陣進行Z字形掃描(Zigzag Scan)。給定一個n×n
Z字形變換
ext row tco extend ret == 好的 main 給定 將字符串 "PAYPALISHIRING" 以 Z 字形排列成給定的行數: P A H N A P L S I I G Y I R 之後從左往右,逐行讀取字符:"PAHNAPLS
【LeetCode】6. Z字形變換
題目連結:https://leetcode-cn.com/problems/zigzag-conversion/description/ 題目描述 將字串 “PAYPALISHIRING” 以Z字形排列成給定的行數: P A H N A P L S I I G Y
leetcode 6: Z字形變換
將字串 "PAYPALISHIRING" 以Z字形排列成給定的行數: P A H N A P L S I I G Y I R 之後從左往右,逐行讀取字元:"PAHNAPLSIIGYIR" 實現一個將字串進行指定行數變換的函式: string convert(s
LeetCode之6. Z 字形變換
LeetCode之6. Z 字形變換 將一個給定字串根據給定的行數,以從上往下、從左到右進行 Z 字形排列。 比如輸入字串為 “LEETCODEISHIRING” 行數為 3 時,排列如下: 之後,你的輸出需要從左往右逐行讀取,產生出一個新的字串,比如:“LCIRET
Leetcode 6. Z字形變換 C++
題目描述 思路 一下做法是一種比較粗暴的做法。通過定義一個二維陣列,記錄Z型變換後的結果,之後再將結果讀出。在程式中,只需要定義一個變數(ln)用於記錄是哪一行該插入。如果到達最上端,則下一次就開始向下一行插入。如果到達最下端,那麼下一次就開始向上一行插入。 解答 cl
【LeetCode】6.ZigZag Conversion Z字形變換
示例1: Input: s = "PAYPALISHIRING", numRows = 3 Output: "PAHNAPLSIIGYIR" Explanation: P A H N A P L S I I G Y I R 示例2: Input: s =
LeetCode-6. Z 字形變換
題目地址:https://leetcode-cn.com/problems/zigzag-conversion/ 題意:字面意思 思路:模擬一下就好了 AC程式碼: class Solution { public: string convert(string s, int n
6. Z字形變換(leetcode)
將字串 "PAYPALISHIRING" 以Z字形排列成給定的行數: P A H N A P L S I I G Y I R 之後從左往右,逐行讀取字元:"PAHNAPLSIIGYIR" 實現一個將字串進行指定行數變換的函式:
LeetCode 6. Z字形變換
題目描述: 將字串 "PAYPALISHIRING" 以Z字形排列成給定的行數: P A H N A P L S I I G Y I R 之後從左往右,逐行讀取字元:"PAHNAPLSIIGYIR" 實現一個將字串進行指定行數變換的函式: st
006——Z字形變換
參考答案: #include<iostream> #include<vector> #include<string> usingnamespacestd; stringconvert(strings,intnRows) { //如果nR
[leetcode]Z字形變換(Zigzag Conversion)
Z字形變換(Zigzag Conversion) 將字串 "PAYPALISHIRING" 以Z字形排列成給定的行數: P A H N A P L S I I G Y I R 之後從左往右,逐行讀取字元:"PAHNAPLSIIGYIR" 實現一個
LeetCode(6)—— Z字形變換
題目內容 描述 將字串 "PAYPALISHIRING"以Z字形排列成給定的行數: P A H N A P L S I I G Y I R 之後從左往右,逐行讀取字元:"PAHNAPLSIIGYIR" 實現一個將字串進行指定行數變換的函式: s
Leetcode Z字形變換
題目描述: 將字串 "PAYPALISHIRING" 以Z字形排列成給定的行數: P A H N A P L S I I G Y I R 之後從左往右,逐行讀取字元:"PAHNAPLSIIGYIR" 實現一個將字串進行指定行數變換的函式: st