LeetCode刷題筆記 回溯演算法集合

2021-09-22 21:23:16 字數 4030 閱讀 9561

給定乙個無重複元素的陣列 candidates 和乙個目標數 target ,找出 candidates 中所有可以使數字和為 target 的組合。

candidates 中的數字可以無限制重複被選取。

class

solution

public

void

find

(list

> listall, list

temp,

int[

] candidates,

int target,

int index)

if(target < candidates[0]

)return

;for

(int i = index; i < candidates.length && candidates[i]

<= target; i++)}

}

給定乙個陣列 candidates 和乙個目標數 target ,找出 candidates 中所有可以使數字和為 target 的組合。

candidates 中的每個數字在每個組合中只能使用一次。

class

solution

public

void

find

(list

> res,

int index,

int sum, list

tmp_list,

int[

] candidates,

int target)

for(

int i = index; i < candidates.length; i++)}

}

找出所有相加之和為 n 的 k 個數的組合。組合中只允許含有 1 - 9 的正整數,並且每種組合中不存在重複的數字。

class

solution

; list

> ans =

newarraylist

>()

;dfs

(nums,

0,n,k,

newarraylist

(),ans)

;return ans;

}private

void

dfs(

int[

] nums,

int i,

int left,

int k,arraylist

cur,list

> ans)

else

return;}

for(

int j = i;j < nums.length;j++)}

}

給定乙個沒有重複數字的序列,返回其所有可能的全排列。

class

solution

return res;

}private

void

find

(list

> res, list

tmp,

int[

] nums)

for(

int i =

0; i < nums.length; i++)}

}}/* 方法二:不對陣列進行加減操作,而是交換,這種方法更快 ----------------------------------*/

class

solution

digui

(len,output,nums_li,first)

;//呼叫遞迴函式

return output;

}//遞迴函式

public

static

void

helper

(int len,list

> output

,arraylist

nums_li,

int first)

int i;

for(i=first;i}/* 方法三: 三個for迴圈,其實和for迴圈很像 -------------------------------------*/

class

solution

} result = resultx;

}return result;

}}

給定乙個可包含重複數字的序列,返回所有不重複的全排列。

class

solution

private

void

backtrack

(list

> res,

int[

] nums,

int[

] visited, arraylist

tmp)

for(

int i =

0; i < nums.length; i++)}

}

給定一組不含重複元素的整數陣列 nums,返回該陣列所有可能的子集(冪集)。

class

solution

private

void

subsetscore

(arraylist

> res, arraylist

list,

int[

] nums,

int index)}}

/* 方法二: 兩個for迴圈完成 -------------------------------------*/

class

solution

}return result;

}}

給定乙個可能包含重複元素的整數陣列 nums,返回該陣列所有可能的子集(冪集)。

說明:解集不能包含重複的子集。

class

solution

public

void

backtrack

(list

> res,

int[

]nums,list

tmp,

int start)

}}

給定兩個整數 n 和 k,返回 1 … n 中所有可能的 k 個數的組合。

class

solution

private

void

helper

(int n,

int k,

int start, list

> res, list

temp)

for(

int j = start; j <= n -

(k - temp.

size()

)+1; j++)}

}

給定乙個只包含數字的字串,復原它並返回所有可能的 ip 位址格式。

class

solution

private

void

helper

(int start, string temp,

int flag, string s, list

list,

int len)

if(flag <0)

return

;for

(int i = start; i < start+

3; i++)if

(integer.

parseint

(s.substring

(start, i+1)

)<=

255)

helper

(i+1

, temp+s.

substring

(start, i+1)

+"."

, flag-1,

s, list, len);}

}}}

LeetCode刷題筆記 46(涉及到回溯)

題目 全排列 給定乙個沒有重複數字的序列,返回其所有可能的全排列。示例 輸入 1,2,3 輸出 1,2,3 1,3,2 2,1,3 2,3,1 3,1,2 3,2,1 解決乙個回溯問題,實際上就是乙個決策樹的遍歷過程。你只需要思考 3 個問題 1 路徑 也就是已經做出的選擇。2 選擇列表 也就是你當...

Leetcode刷題筆記

1.兩數之和給定乙個整數陣列nums 和乙個目標值target,請你在該陣列中找出和為目標值的那兩個整數,並返回他們的陣列下標。ps 你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。思路 用target減去nums中的每乙個數,並設立乙個字典來記錄對應的下標 class...

LeetCode刷題筆記

實現strstr 給定乙個 haystack 字串和乙個 needle 字串,在 haystack 字串中找出 needle 字串出現的第乙個位置 從0開始 如果不存在,則返回 1。示例 1 輸入 haystack hello needle ll 輸出 2 示例 2 輸入 haystack aaaa...