zoukankan      html  css  js  c++  java
  • [LC] 254. 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.

    Example 1:

    Input: 1
    Output: []
    

    Example 2:

    Input: 37
    Output:[]

    Example 3:

    Input: 12
    Output:
    [
      [2, 6],
      [2, 2, 3],
      [3, 4]
    ]

    Example 4:

    Input: 32
    Output:
    [
      [2, 16],
      [2, 2, 8],
      [2, 2, 2, 4],
      [2, 2, 2, 2, 2],
      [2, 4, 4],
      [4, 8]
    ]

    class Solution {
        public List<List<Integer>> getFactors(int n) {
            List<List<Integer>> res = new ArrayList<>();
            helper(res, new ArrayList<>(), n, 2);
            return res;
        }
        
        private void helper(List<List<Integer>> res, List<Integer> list, int n, int start) {
            if (n == 1) {
                // exclude the self case
                if (list.size() > 1) {
                    res.add(new ArrayList<>(list));
                    return;
                }
            }
            for (int i = start; i <= n; i++) {
                if (n % i == 0) {
                    list.add(i);
                    helper(res, list, n / i, i);
                    list.remove(list.size() - 1);
                }
            }
        }
    }
    class Solution {
        public List<List<Integer>> getFactors(int n) {
            List<Integer> factors = new ArrayList<>();
            for (int i = 2; i * i <= n; i++) {
                if (n % i == 0) {
                    factors.add(i);
                    if (i * i != n) {
                        factors.add(n / i);
                    }
                }
            }
            // Collections.sort(factors);
            // System.out.println(factors);
            List<List<Integer>> res = new ArrayList<>();
            dfs(res, factors, new ArrayList<Integer>(), 1, n, 0);
            return res;
        }
        
            private void dfs(List<List<Integer>> res, List<Integer> factors, List<Integer> list, int cur, int n, int index) {
            if (cur > n) {
                return;
            }
            if (cur == n) {
                if (list.size() > 1) {
                    res.add(new ArrayList<>(list));                
                }
                return;
            }
            // System.out.println(index);
            for (int i = index; i < factors.size(); i++) {
                list.add(factors.get(i));
                dfs(res, factors, list, cur * factors.get(i), n, i);
                list.remove(list.size() - 1);
            }
        }
    }
  • 相关阅读:
    POJ1422 Air Raid 【DAG最小路径覆盖】
    Android studio ElasticDownloadView
    POJ 1753 Flip Game
    Ogre嵌入MFC傻瓜全然教程(三)
    你的水桶有多满
    uva 10581
    map 解析
    In-Out Parameters inout keyword
    Associated Values & enum
    函数式编程 归档
  • 原文地址:https://www.cnblogs.com/xuanlu/p/12508886.html
Copyright © 2011-2022 走看看