文档章节

从n个数中找到和为m的数

pczhangtl
 pczhangtl
发布于 2014/09/01 08:34
字数 218
阅读 13
收藏 0
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Stack;

/*
 * Find the nums which sum is M
 */
public class FindMInN {
	public static void main(String args[]) {
		int arr[] = {1,2,4,7,11,15};
		List<Integer> li = new ArrayList<Integer>();
		li.add(1);
		li.add(2);
		li.add(4);
		li.add(7);
		li.add(11);
		li.add(15);
		//int arr[] = { 1, 2 ,2,2 };
		Stack<Integer> stack = new Stack<Integer>();
		findMInN(li, 2, 15, stack);
//		findMInN(arr, 15, 0, stack);
	}

//	public static void findMInN(int arr[], int m, int k, Stack<Integer> stack) {
//		if (k == arr.length) {
//			return;
//		}
//
//		for (int i = k; i < arr.length; i++) {
//			int remained = m - arr[i];
//			stack.add(arr[i]);
//			if (remained > 0) {
//				findMInN(arr, remained, k + 1, stack);
//			} else if(remained == 0){
//				Iterator itr = stack.iterator();
//				while (itr.hasNext()) {
//					System.out.println(itr.next());
//				}
//				System.out.println("Find the combination!");
//			}
//			stack.pop();
//		}
//
//	}
	
	public static void findMInN(List<Integer> li, int m, int remained, Stack<Integer> stack){
		
		if(m == 1 && li.contains(remained)){
			Iterator itr = stack.iterator();
			while (itr.hasNext()) {
				System.out.println(itr.next());
			}
			System.out.println("Remained " + remained);
			System.out.println("Find the combination!");
			return;
		} else if(m == 1 && !li.contains(remained)) {
			System.out.println("Not find element!");
			return;
		} 
		
		for(int i = 0; i < li.size(); i++){
			List<Integer> remainedList = new ArrayList<Integer>();
			for(int j = 0; j < li.size(); j++){
				if(j != i){
					remainedList.add(li.get(j));
				}
			}
			stack.add(li.get(i));
			findMInN(remainedList, m - 1, remained - li.get(i), stack);
			stack.pop();
		}
	}
}


© 著作权归作者所有

共有 人打赏支持
pczhangtl
粉丝 46
博文 707
码字总数 113318
作品 0
浦东
高级程序员
私信 提问
给定一个正整数,找出与其二进制表示中1的个数相同,且大小最接近的那两个数

/** * 功能:给定一个正整数,找出与其二进制表示中1的个数相同,且大小最接近的那两个数。 * (一个略大一个略小。) / 三种方法: 方法一:蛮力法 方法二:位操作法 [java] view plain co...

一贱书生
2016/11/19
3
0
如何从100万个数中找出最大的前100个数

下面摘自http://blog.sina.com.cn/s/blog_682686610100xlrr.html: 1. 算法如下:根据快速排序划分的思想 (1) 递归对所有数据分成[a,b)b(b,d]两个区间,(b,d]区间内的数都是大于[a,b)区间内...

樂天
2014/10/17
0
0
【nowcoder-2017校招真题】保留最大的数

牛客在线编程-保留最大的数 题目描述 给定一个十进制的正整数number,选择从里面去掉一部分数字,希望保留下来的数字组成的正整数最大。 输入描述: 输入为两行内容,第一行是正整数number,1...

圣洁之子
2018/04/26
0
0
[剑指offer] 数组中重复的数字

本文首发于我的个人博客:尾尾部落 题目描述 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出...

繁著
2018/07/27
0
0
HDU ~ 6287 ~ 口算训练 (思维 + 分解质因数 + 二分)

题意: 小Q非常喜欢数学,但是他的口算能力非常弱。因此他找到了小T,给了小T一个长度为n的正整数序列a1,a2,...,an,要求小T抛出m个问题以训练他的口算能力。 每个问题给出三个正整数l,r,d,...

zscdst
2018/05/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

欧拉公式

欧拉公式表达式 欧拉公式的几何意 cosθ + j sinθ 是个复数,实数部分也就是实部为 cosθ ,虚数部分也就是虚部为 j sinθ ,对应复平面单位圆上的一个点。 根据欧拉公式和这个点可以用 复指...

sharelocked
27分钟前
2
0
burpsuite无法抓取https数据包

1.将浏览器和burpsuite的代理都设置好 2.在浏览器地址栏输入: http://burp 3.下载下面的证书,并将证书导入浏览器 cacert.der

Frost729
51分钟前
1
0
JeeSite4.x 消息管理、消息推送、消息提醒

实现统一的消息推送接口,包含PC消息、短信消息、邮件消息、微信消息等,无需让所有开发者了解消息是怎么发送出去的,只需了解消息发送接口即可。 所有推送消息均通过 MsgPushUtils 工具类发...

ThinkGem
今天
6
0
OpenML

https://www.openml.org/search?type=data

shengjuntu
今天
2
0
java强引用,软引用,弱引用和虚引用

先来简要说一下这四种引用的特性: 强引用:如果一个对象具有强引用,那垃圾回收器绝不会回收它 软引用:如果一个对象只具有软引用,则内存空间足够,垃圾回收器就不会回收它 弱引用:在垃圾...

woshixin
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部