20 表示數值的字符串? 馬上解題
題目描述
true:"+100","5e2","-123","3.1416","-1E-16"
false:"12e","1a3.14","1.2.3","+-5","12e+4.3"
解題思路
使用正則表達式進行匹配。
[]? : 字符集合
()? : 分組
?? : 重復 0 ~ 1 次
+? : 重復 1 ~ n 次
*? : 重復 0 ~ n 次
.? : 任意字符
\\. : 轉義后的 .
\\d : 數字
21 調整數組順序使奇數位于偶數前面? 馬上解題
題目描述
需要保證奇數和奇數,偶數和偶數之間的相對位置不變。
解題思路
方法一:創建一個新數組,時間復雜度 O(N),空間復雜度 O(N)。
方法二:使用冒泡思想,每次都當前偶數上浮到當前最右邊。時間復雜度 O(N2),空間復雜度 O(1),時間換空間。
代碼
方法一:
方法二:
22 鏈表中倒數第 K 個結點? 馬上解題
解題思路
設鏈表的長度為 N。設置兩個指針 P1 和 P2,先讓 P1 移動 K 個節點,則還有 N - K 個節點可以移動。此時讓 P1 和 P2 同時移動,可以知道當 P1 移動到鏈表結尾時,P2 移動到第 N - K 個節點處,該位置就是倒數第 K 個節點。
代碼
23 鏈表中環的入口結點? 馬上解題
題目描述
一個鏈表中包含環,請找出該鏈表的環的入口結點。要求不能使用額外的空間。
解題思路
使用雙指針,一個指針 fast 每次移動兩個節點,一個指針 slow 每次移動一個節點。因為存在環,所以兩個指針必定相遇在環中的某個節點上。假設相遇點在下圖的 z1 位置,此時 fast 移動的節點數為 x+2y+z,slow 為 x+y,由于 fast 速度比 slow 快一倍,因此 x+2y+z=2(x+y),得到 x=z。
在相遇點,slow 要到環的入口點還需要移動 z 個節點,如果讓 fast 重新從頭開始移動,并且速度變為每次移動一個節點,那么它到環入口點還需要移動 x 個節點。在上面已經推導出 x=z,因此 fast 和 slow 將在環入口點相遇。
代碼
24?反轉鏈表? 馬上解題
代碼
(1)遞歸
(2)頭插法
25?合并兩個排序的鏈表? 馬上解題
題目描述
代碼
(1)遞歸
(2)迭代
26 樹的子結構? 馬上解題
題目描述
代碼
27 二叉樹的鏡像? 馬上解題
題目描述
代碼
28 對稱的二叉樹? 馬上解題
題目描述
代碼
29 順時針打印矩陣? 馬上解題
題目描述
下圖的矩陣順時針打印結果為:1, 2, 3, 4, 8, 12, 16, 15, 14, 13, 9, 5, 6, 7, 11, 10
代碼