組合總和
組合總和 ii
組合總和 iii
組合總和 iv
全排列單詞搜尋
最大單詞長度乘積
1. 組合總和
給定乙個無重複元素的陣列 candidates 和乙個目標數 target ,找出 candidates 中所有可以使數字和為 target 的組合。
candidates 中的數字可以無限制重複被選取。
說明:所有數字(包括 target)都是正整數。
解集不能包含重複的組合。
示例 1:
輸入: candidates = [2,3,6,7], target = 7,
所求解集為:
[ [7], [2,2,3]]
示例 2:
輸入: candidates = [2,3,5], target = 8,
所求解集為:
[ [2,2,2,2], [2,3,3], [3,5]]
class solution
private static void findallcombine(list> list, int candidates, int target, int start, arraylistal)
if(target==0)
for(int i=start;i2. 組合總和 ii
給定乙個陣列 candidates 和乙個目標數 target ,找出 candidates 中所有可以使數字和為 target 的組合。
candidates 中的每個數字在每個組合中只能使用一次。
說明:所有數字(包括目標數)都是正整數。
解集不能包含重複的組合。
示例 1:
輸入: candidates = [10,1,2,7,6,1,5], target = 8,
所求解集為:
[ [1, 7], [1, 2, 5], [2, 6], [1, 1, 6]]
示例 2:
輸入: candidates = [2,5,2,1,2], target = 5,
所求解集為:
[[1,2,2],
[5]]
class solution
private static void findallonly(list> list, arraylistal, int candidates, int target, int start)
if(target==0)
return;
} for(int i=start;i3. 組合總和 iii
找出所有相加之和為 n 的 k 個數的組合。組合中只允許含有 1 - 9 的正整數,並且每種組合中不存在重複的數字。
說明:所有數字都是正整數。
解集不能包含重複的組合。
示例 1:
輸入: k = 3, n = 7
輸出: [[1,2,4]]
示例 2:
輸入: k = 3, n = 9
輸出: [[1,2,6], [1,3,5], [2,3,4]]
class solution
//找到九個數中等於n的排列組合
findequaln(candidates,ls,new arraylist(),0,n,k);
return ls;
}private static void findequaln(int candidates, list> ls, arraylistal, int start, int target, int k)
if(target==0)
return ;
} for(int i=start;i4. 組合總和 iv
給定乙個由正整數組成且不存在重複數字的陣列,找出和為給定目標正整數的組合的個數。
示例:nums = [1, 2, 3]
target = 4
所有可能的組合為:
(1, 1, 1, 1)
(1, 1, 2)
(1, 2, 1)
(1, 3)
(2, 1, 1)
(2, 2)
(3, 1)
請注意,順序不同的序列被視作不同的組合。
因此輸出為 7。
高階:如果給定的陣列中含有負數會怎麼樣?
問題會產生什麼變化?
我們需要在題目中新增什麼限制來允許負數的出現?
注:這是力扣上那位大牛的**,我沒有改
class solution }}
return dp[target];
}}
5. 全排列
給定乙個沒有重複數字的序列,返回其所有可能的全排列。
示例:輸入: [1,2,3]
輸出:[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]
class solution
//核心
public static list> recursion(list> al,intnums,int begin,int end)
al.add(al2);
return al;
}else
return al;}}
//交換
private static void exch(int nums, int i, int j)
}
6. 單詞搜尋
給定乙個二維網格和乙個單詞,找出該單詞是否存在於網格中。
單詞必須按照字母順序,通過相鄰的單元格內的字母構成,其中「相鄰」單元格是那些水平相鄰或垂直相鄰的單元格。同乙個單元格內的字母不允許被重複使用。
示例:board =
[ [『a』,『b』,『c』,『e』],[『s』,『f』,『c』,『s』], [『a』,『d』,『e』,『e』]]
給定 word = 「abcced」, 返回 true.
給定 word = 「see」, 返回 true.
給定 word = 「abcb」, 返回 false.
class solution
} int max=0;
//當兩個數按位與時,等於0說明沒有相同字母
for(int i=0;i}
} return max;
}}
回溯演算法 1
演算法框架一 procedure try k integer begin for i 1 to 算符種類 do if 滿足條件 then begin 儲存結果 if 到目的地 then 輸出解 else try k 1 恢復,儲存結果之前的狀態,回溯一步 end end 演算法框架二 procedu...
演算法題解篇 Java 八皇后演算法題(遞迴回溯法)
author skipper class solution 遞迴回溯方式擺放皇后 param n 待擺放皇后個數 param index 已擺放皇后個數 private intputqueen int n,int index 表示在 index 行的第 i 列嘗試擺放皇后 for int i 0 i...
關於java的優化1
1.把字串常量放在前面 if aa equals val 2避免意外的賦值 if 1 val 總結第一條和第二條,就是把字串常量和數字常量等放在最前面 3所有的方法都用 final 宣告 除了介面 專門用於繼承 都應該是嚴格的 final,且所有的變數都使用final public final vo...