• LeetCode-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. You may assume that n is always positive.
    2. 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]
    ]
    
    Analysis:
    Recursively build  a combination, for a target value (named target), we starting from the smallest factor, which is the last factor used rather than 2. If we get a new factor, saying target = x*y, we should guarantee that x<=y; we then go to the next layer of recursion looking for all combinations with target value of y.
     
    Solution:
    public class Solution {
        public List<List<Integer>> getFactors(int n) {
            Deque<Integer> combination = new LinkedList<Integer>();
            List<List<Integer>> resList = new LinkedList<List<Integer>>();
            getFactorsRecur(n,n,2,combination,resList);
            return resList;
        }
        
        public void getFactorsRecur(int n, int target, int lastFactor, Deque<Integer> combination, List<List<Integer>> resList){
            if (target<lastFactor){
                return;
            }
            
            // add current combination into resList.
            if (target<n){
                List<Integer> temp = new ArrayList<Integer>();
                temp.addAll(combination);
                temp.add(target);
                resList.add(temp);
            }
            
            // Further decompose the current target.
            for (int i=lastFactor;i*i<=target;i++){
                if (target%i==0){
                    combination.addLast(i);
                    getFactorsRecur(n,target/i,i,combination,resList);
                    combination.removeLast();
                }
            }
        }
    }
     
     
     
     
     
     
  • 相关阅读:
    Entity Framework Core tools reference
    安装 SQL Server 并在 Ubuntu 上创建数据库
    Install Docker Engine on Ubuntu
    ubuntu 18.04 安装.net 5
    C# 远程服务器 安装、卸载 Windows 服务,读取远程注册表,关闭杀掉远程进程
    ASP.NET MVC ActionResult
    使用WCF实现消息推送
    postgresql 数据类型转换,日期操作函数
    sql 按姓氏笔画(拼音)排序
    postgresql 导入导出
  • 原文地址:https://www.cnblogs.com/lishiblog/p/5872140.html
Copyright © 2020-2023  润新知