这篇文章主要介绍“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找出数字组合的方法是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。