Hyplus目录
Java
import java.util.ArrayList;
import java.util.List;
/**
* <a href="https://leetcode.cn/problems/subsets/">Subsets</a>
* 位运算;数组;回溯
*/
class Solution {
public List<List<Integer>> subsets(int[] nums) {
List<List<Integer>> res = new ArrayList<>();
dfs(0, nums, new ArrayList<>(), res);
return res;
}
private void dfs(int cur, int[] nums, List<Integer> path, List<List<Integer>> res) {
if (cur == nums.length) {
res.add(new ArrayList<>(path));
return;
}
path.add(nums[cur]);
dfs(cur + 1, nums, path, res);
path.remove(path.size() - 1);
dfs(cur + 1, nums, path, res);
}
}
Go
func subsets(nums []int) (res [][]int) {
var dfs func(int, []int)
dfs = func(cur int, path []int) {
if cur == len(nums) {
res = append(res, append([]int(nil), path...))
return
}
path = append(path, nums[cur])
dfs(cur+1, path)
path = path[:len(path)-1]
dfs(cur+1, path)
}
dfs(0, []int{})
return
}
JavaScript
/**
* @param {number[]} nums
* @return {number[][]}
*/
var subsets = function (nums) {
let res = [];
let dfs = function (cur, path) {
if (cur === nums.length) {
res.push(path.slice());
return;
}
path.push(nums[cur]);
dfs(cur + 1, path);
path.pop();
dfs(cur + 1, path);
}
dfs(0, []);
return res;
};
PHP
class Solution {
/**
* @param Integer[] $nums
* @return Integer[][]
*/
function subsets(array $nums): array {
$res = [];
$this->dfs(0, $nums, [], $res);
return $res;
}
private function dfs($cur, $nums, $path, &$res): void {
if ($cur == count($nums)) {
$res[] = $path;
return;
}
$path[] = $nums[$cur];
$this->dfs($cur + 1, $nums, $path, $res);
array_pop($path);
$this->dfs($cur + 1, $nums, $path, $res);
}
}