• *Factor Combinations


    Numbers can be regarded as product of its factors. For example,

    8 = 2 x 2 x 2;
      = 2 x 4.
    

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

    Note: 

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

    Examples: 
    input: 1
    output: 

    []
    
    input: 37
    output: 
    []
    
    input: 12
    output:
    [
      [2, 6],
      [2, 2, 3],
      [3, 4]
    ]
    
    input: 32
    output:
    [
      [2, 16],
      [2, 2, 8],
      [2, 2, 2, 4],
      [2, 2, 2, 2, 2],
      [2, 4, 4],
      [4, 8]
    ]

    快速解法:

    public class Solution {
    public List<List<Integer>> getFactors(int n) {
        List<List<Integer>> result = new ArrayList<List<Integer>>();
        helper(result, new ArrayList<Integer>(), n, -1);
        return result;
    }
    
    public void helper(List<List<Integer>> result, List<Integer> item, int n, int start){
       if (start != -1) {
            item.add(n);
            result.add(new ArrayList<Integer>(item));
            item.remove(item.size() - 1);
        }
        
        for (int i = Math.max(start,2); i <= Math.sqrt(n); ++i) {
            if (n % i == 0) {
                item.add(i);
                helper(result, item, n/i, i);
                item.remove(item.size()-1);
            }
        }
    }
    }















    请忽略一下解法

    什么破方法慢死!recursion的解法:
    public class Solution {
     public List<List<Integer>> getFactors(int n) {
        List<List<Integer>> result = new ArrayList<List<Integer>>();
        helper(result, new ArrayList<Integer>(), n, 2);
        return result;
    }
    
    public void helper(List<List<Integer>> result, List<Integer> item, int n, int start){
        if (n <= 1) {
            if (item.size() > 1) {
                result.add(new ArrayList<Integer>(item));
            System.out.println("add item to result");
            }
            return;
        }
    
        for (int i = start; i <= n; ++i) {
            if (n % i == 0) {
                item.add(i);
                System.out.println("item");
                System.out.println(item);
                helper(result, item, n/i, i);
                item.remove(item.size()-1);
                System.out.println("removed item");
                System.out.println(item);
            }
        }
    }
    }

    运行结果:

    test case n=8

    item
    [2]
    item
    [2, 2]
    item
    [2, 2, 2]
    add to result
    removed item
    [2, 2]
    removed item
    [2]
    item
    [2, 4]
    add to result
    removed item
    [2]
    removed item
    []
    item
    [4]
    removed item
    []
    item
    [8]
    removed item
    []

    结果: 

    Your answer
    
    [[2,2,2],[2,4]]
    
    
    Expected answer
    
    [[2,4],[2,2,2]]

    reference:https://leetcode.com/discuss/51250/my-recursive-dfs-java-solution

     
  • 相关阅读:
    python之----------字符编码具体原理
    css部分复习整理
    秘钥登录服务器执行shell脚本
    idea配置github
    InteliJ IDEA 简单使用:配置项目所需jdk
    IntelliJ IDEA 中安装junit插件
    IDEA 运行maven命令时报错: -Dmaven.multiModuleProjectDirectory system propery is not set
    idea如何编译maven项目
    idea项目左边栏只能看到文件看不到项目结构
    idea如何导入一个maven项目
  • 原文地址:https://www.cnblogs.com/hygeia/p/5087613.html
Copyright © 2020-2023  润新知