given a set ofdistinctintegers, nums, return all possible subsets (the power set).
note:the solution set must not contain duplicate subsets.
for example,
ifnums=[1,2,3]
, a solution is:
[給一組數,輸出其所有無序子陣列,空子陣列也考慮在內。[3],
[1],
[2],
[1,2,3],
[1,3],
[2,3],
[1,2],
]
本題很容易想到寫出一棵子集樹,用回溯的方法解,只是沒有任何剪枝函式,僅僅深度優先遍歷這個子集樹,c++**如下:
class solution
dfs(++k);
k--;
temp.push_back(nums[k-1]);
dfs(++k);
temp.pop_back();
}vector> subsets(vector& numbers)
};
注意由於子集樹是乙個二叉樹,因此dfs內部不需要用for迴圈遍歷同層,只需要先後進行兩次遞迴呼叫dfs,用於選擇0和1,對應不取或取相應數字。上述演算法和backtracking類似。
本題還有乙個比較巧妙的方法,同樣是通過那棵二叉樹找到靈感。用0-2^n-1這幾個數作為最終輸出中的2^n個vector的序號,對序號所表示數的二進位制進行檢測,某一位為1代表該vector擁有對應的乙個數,依次將數填入res中。c++**如下:
class solution
}return res;
}};
演算法學習日誌
計畫 預計兩個月。乙個月 實際情況 快速排序。演算法思想 分治 時間複雜度 o nlogn 2020 5 13 歸併排序。演算法思想 分治 時間複雜度 o nlogn 2020 5 14 整數二分。難點,劃重點。注1 捋一下搞不懂的地方,對於求上下界問題中的check 函式很亂。注2 演算法思想 折...
LeetCode 演算法學習 2
longest substring without repeating characters given a string,find the length of the longest substring without repeating characters.example 1 input ab...
LeetCode演算法學習十一 整數反轉
給出乙個 32 位的有符號整數,你需要將這個整數中每位上的數字進行反轉。示例 1 輸入 123 輸出 321 示例 2 輸入 123 輸出 321 示例 3 輸入 120 輸出 21 注意 假設我們的環境只能儲存得下 32 位的有符號整數,則其數值範圍為 231,231 1 請根據這個假設,如果反轉...