本文主要是介绍懒人读算法(八)-所有子集,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
趣味题
给一个唯一的数组,返回所有该数组的子集
例如 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...
这篇关于懒人读算法(八)-所有子集的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!