leetcode 求子集

leetcode 78 – 求子集

双非普本想刷题,不会递归老是迷。
碰到乐扣求子集,不会做啊干着急。

题目描述(中等难度):

给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。


解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。

示例 1:

输入:nums = [1,2,3]
输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]

示例 2:

输入:nums = [0]
输出:[[],[0]]

提示:

1 <= nums.length <= 10
-10 <= nums[i] <= 10
nums 中的所有元素 互不相同

思路:

是这个过程,假设输入数组是{1,2,3}
我想要,1,12,123,13,2,23,3。我是这样思考的。也就是我每次进来数组的一个数都是累加,如果加到最后一个数,那么我就换上一个数。就像我加到123时,已经时最后一个数了,所以我把组合12,给换成了13,让3取代2的位置。

代码实现:

class Solution {
	// 这个链表用来存现在有几个数在排序
    List<Integer> t = new ArrayList<Integer>();
    // 结果链表
    List<List<Integer>> ans = new ArrayList<List<Integer>>();

    public List<List<Integer>> subsets(int[] nums) {
    	// 调用方法,递归开始(入口) 
        dfs(0, nums);
        return ans;
    }
	// 递归的方法
    public void dfs(int cur, int[] nums) {
    	// 如果下标越界了,说明是遍历到最后一个,就保存
        if (cur == nums.length) {
            ans.add(new ArrayList<Integer>(t));
            return;
        }
        // 如果不是最后一个就加入排序列表
        t.add(nums[cur]);
        // 递归下一个元素
        dfs(cur + 1, nums);
        // 移除这一个
        t.remove(t.size() - 1);
        // 换下一个人上
        dfs(cur + 1, nums);
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值