趣味题
给一个唯一的数组,返回所有该数组的子集
例如 nums=[1,2,3]
返回:
[
[3],
[1],
[2],
[1,2,3],
[1,3],
[2,3],
[1,2],
[]
]
答案:
public class Solution {
public List<List<Integer>> subsets(int[] nums) {
List<List<Integer>> result = new ArrayList<>();
recurse(result, nums, new Stack<>(), 0);
return result;
}
private void recurse(List<List<Integer>> result, int[] nums, Stack path, int position) {
if(position == nums.length) {
result.add(new ArrayList<>(path));
return;
}
path.push(nums[position]);
recurse(result, nums, path, position + 1);
path.pop();
recurse(result, nums, path, position + 1);
}
}
解析:懂递归者得天下,一些很复杂的东西用递归就很简单的实现
执行顺序1 position=0 path=[] result=[]
path=[1] position=1
执行顺序2 position=1 path=[1] result=[]
path=[1,2] position=2
执行顺序3 position=2 path=[1,2] result=[]
path=[1,2,3] position=3
执行顺序4 position=3 path=[1,2,3] result=[]
result=[1,2,3] return
执行顺序5 position=2 path=[1,2] result=[1,2,3]
path=[1,2] position=3
执行顺序6 position=3
result=[1,2] return
...