这篇文章主要介绍“Java找出数字组合的方法是什么”,在日常操作中,相信很多人在Java找出数字组合的方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java找出数字组合的方法是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
给出一组候选数字(C)和目标数字(T),找到C中所有的组合,使找出的数字和为T。C中的数字可以无限制重复被选取。
例如,给出候选数组[2,3,6,7]和目标数字7
所求的解为:[7] 和 [2,2,3]
给定一个数组,从中找出一组数来,使其和等于target。数组无序,但都是正整数。
与40题比较
I和II不同的是,I数组里没有重复的数,但一个数可以用多次;II数组里有重复,一个数只能用一次。
I和II都要求返回结果中没有重复的解,且每个解中的数都按非递减排好序。
package com.lifeibigdata.algorithms.leetcode;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* Created by lifei on 16/7/4.
*/
public class CombinationSum {
public static void main(String[] args) {
int[] can = new int[]{5,3,2,1};
CombinationSum cs = new CombinationSum();
cs.combinationSum(can,6);
for (List<Integer> list:ans) {
for (int i:list) {
System.out.print(i+",");
}
System.out.println();
}
}
// static List<List<Integer>> result;
// List<Integer> solu;
// public List<List<Integer>> combinationSum(int[] candidates, int target) {
// result = new ArrayList<>();
// solu = new ArrayList<>();
// Arrays.sort(candidates);
// getCombination(candidates, target, 0, 0);
// return result;
// }
// public void getCombination(int[] candidates, int target, int sum, int level){
// if(sum>target) return;
// if(sum==target){
// result.add(new ArrayList<>(solu));
// return;
// }
// for(int i=level;i<candidates.length;i++){
// sum+=candidates[i];
// solu.add(candidates[i]);
// getCombination(candidates, target, sum, i);
// solu.remove(solu.size()-1);
// sum-=candidates[i];
// }
// }
static List<List<Integer>> ans = new ArrayList<List<Integer>>();//声明全局变量
int[] cans = {};
public List<List<Integer>> combinationSum(int[] candidates, int target) {
this.cans = candidates;
Arrays.sort(cans);
backTracking(new ArrayList(), 0, target);
return ans;
}
public void backTracking(List<Integer> cur, int from, int target) {//初次cur为空
if (target == 0) {
List<Integer> list = new ArrayList<Integer>(cur);
ans.add(list);
} else {
for (int i = from; i < cans.length && cans[i] <= target; i++) {//界限条件
cur.add(cans[i]);
backTracking(cur, i, target - cans[i]); //递归调用
cur.remove(new Integer(cans[i]));
}
}
}
/**
*
*
*
*
1,1,1,1,1,1,
1,1,1,1,2,
1,1,1,3,
1,1,2,2,
1,2,3,
1,5,
2,2,2,
3,3,
*/
}
到此,关于“Java找出数字组合的方法是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
原文链接:https://my.oschina.net/datacube/blog/704933