Java实现寻找和为定值的多个数
1 问题描述
输入两个整数n和sum,要求从数列1,2,3,…,n中随意取出几个数,使得它们的和等于sum,请将其中所有可能的组合列出来。
2 解决方案
上述问题是典型的背包问题的应用,即先找出n个数的所有组合,再在这些组合中寻找组合数相加之和等于sum的组合,并依次输出这些组合中的数。
package com.liuzhen.array_2;
public class ManySumN {
/*
* 函数功能:以字符串形式返回1~n个数的所有子集,其中0代表不包含其中数字i,1代表 包含其中数字i
* 此段代码是运用反射格雷码的思想,具体解释详见:算法笔记_019:背包问题(Java)
*/
public String[] getAllGroup(int n){
int len = (int) Math.pow(2, n);
String[] result = new String[len];
if(n == 1){
result[0] = "0";
result[1] = "1";
return result;
}
String[] temp = getAllGroup(n-1);
for(int i = 0;i < temp.length;i++){
result[i] = "0" + temp[i];
result[len-1-i] = "1" + temp[i];
}
return result;
}
/*
* 参数n:代表有1~n的n个不同整数
* 函数功能:打印出1~n中所有随机组合的几个数,其相加的和等于sum
*/
public void printManySumN(int n,int sum){
System.out.println("1~"+n+"个数中,相加之和等于"+sum+"的所有组合数为:");
String[] allGroup = getAllGroup(n);
for(int i = 0;i < allGroup.length;i++){
char[] temp = allGroup[i].toCharArray();
int tempSum = 0;
for(int j = 0;j < temp.length;j++){
if(temp[j] == '1')
tempSum += (j+1);
}
if(tempSum == sum){
for(int j = 0;j < temp.length;j++){
if(temp[j] == '1')
System.out.print((j+1)+" ");
}
System.out.println();
}
}
}
public static void main(String[] args){
ManySumN test = new ManySumN();
test.printManySumN(10, 16);
}
}
运行结果:
1~10个数中,相加之和等于16的所有组合数为:
9
10
5 7
4 9
5 8
6 7
3 5 6
3 4 7
4 10
5 9
6 8
2 6 7
2 5 8
2 4 9
2 3 4 6
2 3 10
3 5 7
3 4 8
4 5 6
5 10
6 9
7 8
Java实现寻找和为定值的多个数的更多相关文章
- 在数组中寻找和为定值的n个数
/*-------------------------------------------------------*/ /*寻找和为定值的两个数 输入一个数组A[0,N-1]和一个数字Sum,在数组中 ...
- 算法笔记_041:寻找和为定值的多个数(Java)
目录 1 问题描述 2 解决方案 1 问题描述 输入两个整数n和sum,要求从数列1,2,3,...,n中随意取出几个数,使得它们的和等于sum,请将其中所有可能的组合列出来. 2 解决方案 上述问题 ...
- 算法笔记_037:寻找和为定值的两个数(Java)
目录 1 问题描述 2 解决方案 2.1 排序夹逼法 1 问题描述 输入一个整数数组和一个整数,在数组中查找两个数,满足他们的和正好是输入的那个整数.如果有多对数的和等于输入的整数,输出任意一对即 ...
- 编程之法section II: 2.2 和为定值的两个数
====数组篇==== 2.2 求和为定值的两个数: 题目描述:有n个整数,找出其中满足两数相加为target的两个数(如果有多组满足,只需要找出其中一组),要求时间复杂度尽可能低. 解法一: 思路: ...
- 和为定值的m个数
和为定值的m个数 np 问题(时间复杂度o(2**n)) code1: 暴力递归 解决 只有正数的情况 class Solution { private List<List<Integer ...
- 【Data Structure & Algorithm】在排序数组中查找和为定值的两个数
在排序数组中查找和为定值的两个数 题目:输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字,要求时间复杂度是O(n).如果有多对数字的和等于输入的数字,输出 ...
- 编写Java程序,实现从控制台输入对应个数的整数,输出对输入整数的从大到小显示
编写Java程序,实现从控制台输入对应个数的整数,输出对输入整数的从大到小显示 效果如下: 实现代码: import java.util.Arrays; import java.util.Scanne ...
- java 从数据删除指定值
public class ArrayRemoveValue { public static void main(String[] args) { Integer[] _IntArray = new I ...
- python寻找小于给定值的最大质数
# -*- utf-8 -*- # @Time: 2019-04-16 # @ Author: chen def prime(self, value): """判断是否为 ...
随机推荐
- markdonwn 测试1
标题测试 ## 二级标题 ### 三级标题 二级标题 三级标题 段落格式 换行 末尾两个空格 第一行第一行第一行第一行第一行第一行第一行第一行 第二行第二行第二行第二行第二行第二行第二行第二行 第一行 ...
- jstree 反选,测试400条数据左右有点卡
$("#reversecheckallmachines").on("change", function () { var checkedNodes = []; ...
- prev_permutation和next_permutation函数
作用 prev_permutation():简单地来说,就是求上一个比当前数列小的数列 例如:{1,2,3,5,4}的上一个比当前数列 ( 当前数列就是{1,2,3,5,4} ) 小的数列就是{1 ...
- js使用经验--if...else简化
目的 在项目中,if else语句如果用得很多,特别是嵌套,代码不美观,阅读性不好.所以的话,用其他的方式简化替换if...else...就很有必要. 简化的作用就是赠人玫瑰,手留余香.对自己对项目对 ...
- 基于Memcached的Nginx服务器集群session共享
原料:jdk1.8,tomcat7,nginx1.16,memcached-1.2.6,Mem-Tomcat需要的jar包,基于windows7.所有的点击以下链接可下载 链接:https://pan ...
- DOM的使用
1. 修改: 3样: 1. 内容: 3个属性: 1. 获取或修改原始HTML片段: 元素.innerHTML 2. 获取或修改纯文本内容: 元素.textContent vs innerHTML 1. ...
- 正则+re模块知识总结
目录 正则表达式 定义+特点 元字符 量词 贪婪匹配与非贪婪匹配 转义符 re模块 re.findall re.search re.match re.compile re.finditer re.sp ...
- mysql小白系列_06 备份与恢复 - mydumper与myloader
http://blog.csdn.net/leshami/article/details/46815553 https://www.cnblogs.com/zhoujinyi/p/3423641.ht ...
- MySQL InnoDB索引介绍以及在线添加索引实例分析
引言:MySQL之所以能成为经典,不是没有道理的,B+树足矣! 一.索引概念 InnoDB引擎支持三种常见的索引:B+树索引,全文索引和(自适应)哈希索引.B+树索引是传统意义上的索引,构造类似二叉树 ...
- 微信小程序制作个人简历
使用微信小程序云开发制作自己的个人简历,简单高效. 首先需要了解小程序的基本结构以及云开发模式,及一些css样式基础. 使用小程序云数据库.vant组件库实现简历内容. 最终效果如下: 首先申请个人微 ...