懒人读算法(八)-所有子集

趣味题

给一个唯一的数组,返回所有该数组的子集
例如 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
    ...
阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011747152/article/details/78223050
文章标签: 算法
个人分类: 算法
上一篇懒人读算法(七)-旋转矩阵
下一篇懒人读算法(九)-所有子集(有重复)
想对作者说点什么? 我来说一句

求一个集合子集算法示例

2014年06月14日 464KB 下载

没有更多推荐了,返回首页

关闭
关闭