java關於回溯演算法的題1

2021-09-24 19:49:06 字數 3281 閱讀 5156

組合總和

組合總和 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...