千家信息网

Java找出数字组合的方法是什么

发表于:2025-02-03 作者:千家信息网编辑
千家信息网最后更新 2025年02月03日,这篇文章主要介绍"Java找出数字组合的方法是什么",在日常操作中,相信很多人在Java找出数字组合的方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"Java找
千家信息网最后更新 2025年02月03日Java找出数字组合的方法是什么

这篇文章主要介绍"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 list:ans) {            for (int i:list) {                System.out.print(i+",");            }            System.out.println();        }    }//    static List> result;//    List solu;//    public List> 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> ans = new ArrayList>();//声明全局变量    int[] cans = {};    public List> combinationSum(int[] candidates, int target) {        this.cans = candidates;        Arrays.sort(cans);        backTracking(new ArrayList(), 0, target);        return ans;    }    public void backTracking(List cur, int from, int target) {//初次cur为空        if (target == 0) {            List list = new ArrayList(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找出数字组合的方法是什么"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

0