JAVA代码—算法基础:因子组合问题

因子组合问题

问题描述:一个整数进行因子分解,查找所有可能的因子组合。

例如:整数 16, 可以表示为

16 = 2*2*2*2
16 = 2*2*4
16 = 2*8
16 = 4*4

编写一个算法找出给定的一个整数所有的因子组合。
注意:1和该数本身不能算作其因子;如果有因子,所有的因子按照从小到大的顺序排列。

Write a function that takes an integer n and return all possible combinations of its factors.

[NOTE]
Each combination’s factors must be sorted ascending, for example: The factors of 2 and 6 is [2, 6], not [6, 2].
You may assume that n is always positive.
Factors should be greater than 1 and less than n.

算法设计
package com.bean.algorithmbasic;

import java.util.ArrayList;
import java.util.List;

public class FactorCombinations {

    public static void main(String[] s) {

        int Target = 16;
        List<List<Integer>> list=getFactors(Target);
        System.out.println(list);

    }

    public static List<List<Integer>> getFactors(int n) {
        List<List<Integer>> result = new ArrayList<List<Integer>>();
        List<Integer> list = new ArrayList<Integer>();
        helper(2, 1, n, result, list);
        return result;
    }

    public static void helper(int start, int product, int n, List<List<Integer>> result, List<Integer> curr){
        if(start>n || product > n )
            return ;

        if(product==n) {
            ArrayList<Integer> t = new ArrayList<Integer>(curr);
            result.add(t);
            return;
        }   

        for(int i=start; i<n; i++){
            if(i*product>n)
                break;

            if(n%i==0){
                curr.add(i);
                helper(i, i*product, n, result, curr);
                curr.remove(curr.size()-1);
            }
        }
    }

}

(完)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值