給乙個陣列,返回其所有排列組合情況。
input: [1,2,3]和前面回溯不一樣的是,每個解的長度是固定的,在回溯時需要訪問所有的元素,看哪個還沒有使用,所以用了乙個used陣列來記錄:output:
[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ]
public list
>
permute
(int
nums)
list
> res =
newarraylist
<
>()
;public
void
help
(int
nums,
int index, list
one,
boolean
used)
else
}}
和上面一題區別就是給的陣列可能含有重複值。
所有**也差不多,唯一的區別就是先排個序,然後每次回溯時跳過重複的元素:
public list
>
permuteunique
(int
nums)
list
> res =
newarraylist
<
>()
;public
void
help
(int
nums,
int index, list
one,
boolean
used)
else
}}
給乙個字串,包含數字和字母,返回所有字母大小寫不同的可能的組合。
examples:這題區別就大一些了,之前的都是選擇不同的組合或者不同的排列,需要用到迴圈。但這題是對每個元素分別進行改變,看有多少種結果,不需要迴圈,但在遍歷到符合條件的元素時還需要再次進行回溯:input: s = 「a1b2」
output: [「a1b2」, 「a1b2」, 「a1b2」, 「a1b2」]
public list
lettercasepermutation
(string s)
list
res =
newarraylist
<
>()
;public
void
help
(int index, stringbuffer str)
else
else
if(str.
charat
(index)
>=
'a'&& str.
charat
(index)
<=
'z')
help
(index +
1, str);}
}}
刷題49 力扣3道題)
輸入整數陣列arr,找出其中最小的k個數。例如,輸入4 5 1 6 2 7 3 8這8個數字,則最小的4個數字是1 2 3 4。輸入 arr 3,2,1 k 2 輸出 1,2 或者 2,1 輸入 arr 0,1,2,1 k 1 輸出 0 1.寫sort數值排序 2.快速排序 法一 sort排序 寫s...
記一道數字旋轉排列演算法題
面試的時候遇到一道演算法題,當時沒做出來,也沒有什麼思路。睡覺前突然想到解法,記錄一下。題的大意如下,數字以1開始,並圍繞1做逆時針旋轉,其中1的座標為 0,0 如下圖所示 要求給乙個座標,求其未知的數是多少?例 給出 1,0 該座標的數為2 給出 1,2 該座標上的數為22。你可以先思考一下,或者...
線段樹3道超級基礎模板題
codevs 1080線段樹練習 單點修改 區間查詢 include define inf 0x3f3f3f3f const int maxn 1e5 5 using namespace std struct node tree 4 maxn int n,m int q,x,y int ans vo...