78.子集(中等)

2021/4/11 10:25:19

本文主要是介绍78.子集(中等),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

思路:

每一层选出一个数产生分支,利用深度优先(回溯算法),也就是一个栈

代码:

class Solution {
    public List<List<Integer>> subsets(int[] nums) {
		int n=nums.length;
		Deque<Integer> path=new ArrayDeque<>();
		
		List<List<Integer>> res=new ArrayList<>();
		bfs(path,res,0,n,nums);
		return res;
    }
	
	private void bfs(
					Deque<Integer> path,
					List<List<Integer>> res,
					int begin,
					int n,
					int[] nums
					){
		
		res.add(new ArrayList<>(path));
		
		
		for(int i=begin;i<n;i++){
			path.addLast(nums[i]);
			bfs(path,res,i+1,n,nums);
			path.removeLast();
			
		}
		
		
		
	}
}

 

分解:

1)这里不需要设置visited,因为每个分支都不会往回找,i是从begin开始的,而不是从0开始

2)这里的空集[]不需要特别加入,第一次搜索i=0时就将此情况算入了

3)注意:

    i)for循环里面bfs的begin是i+1,而不是i

    ii)path.addLast(nums[i])而不是nums[begin]

 



这篇关于78.子集(中等)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程