• 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();
                }
            }
        }
    }
     
     
     
     
     
     
  • 相关阅读:
    如何实现LRU缓存淘汰算法
    排序算法(上)
    MySQL为什么有时候会选错索引?
    mysql开启慢查询——wamp
    普通索引和唯一索引,应该如何选择
    php开发常用插件
    mysql批量添加大量测试数据
    .text()设置文本,.html()设置html, .val()设置值的使用
    ajax .load()方法
    jquery学习笔记一之window.onload与$(document).ready()区别
  • 原文地址:https://www.cnblogs.com/lishiblog/p/5872140.html
Copyright © 2020-2023  润新知