Solution 21: 子集和问题
2015-07-08 10:30
274 查看
问题描述
输入两个整数n和m,从数列1,2,3,...,n中随意取出几个数。
使其和等于m,把所有符合的组合列出来。
解决思路
dfs,注意:
1. 一个元素只能使用一次;
2. 保证输出的集合不重复。
程序
输入两个整数n和m,从数列1,2,3,...,n中随意取出几个数。
使其和等于m,把所有符合的组合列出来。
解决思路
dfs,注意:
1. 一个元素只能使用一次;
2. 保证输出的集合不重复。
程序
public class SubsetSum { public List<List<Integer>> getSubset(int n, int m) { List<List<Integer>> res = new ArrayList<List<Integer>>(); if (n <= 0 || m <= 0 || m > n * (n + 1) / 2) { return res; } int[] nums = new int ; for (int i = 0; i < nums.length; i++) { nums[i] = i + 1; } List<Integer> sol = new ArrayList<Integer>(); helper(res, sol, nums, m, 0); return res; } private void helper(List<List<Integer>> res, List<Integer> sol, int[] nums, int m, int start) { if (m < 0) { return ; } if (m == 0) { res.add(new ArrayList<Integer>(sol)); return; } for (int i = start; i < nums.length; i++) { if (sol.contains(nums[i])) { continue; } sol.add(nums[i]); helper(res, sol, nums, m - nums[i], i + 1); sol.remove(sol.size() - 1); } } }
相关文章推荐
- ORA-12519错误的解决方案
- iOS 的 XMPPFramework 简介
- excel导入数据库的一点小问题
- ORA-00838: Specified value of MEMORY_TARGET is too small
- Python抓取淘宝下拉框关键词的方法
- 用Scrapy开发项目时遇到的问题
- linux 配置DNS
- Highcharts图例中显示节点数值
- O(n)求素数,求欧拉函数,求莫比乌斯函数,求对mod的逆元,各种求
- <uses-permission>权限
- Xcode磁盘空间大清理
- protocol buffer
- iOS开发系列--数据存取(SQLite和Core Data)
- java数据结构和算法------线性表(顺序表结构)
- 动态规划入门之硬币问题(转)
- CentOS 命令行下连接加密模式为 WPAWPA2-PSK 的无线网络
- SQL语句基础[记录基础语句]
- Unix 命令集锦
- 如何导入MAVEN项目到MyEclipse中
- 8:理解面向对象程序设计