254. Factor Combinations

来源:互联网 发布:雷军 are you ok 知乎 编辑:程序博客网 时间:2024/04/30 03:27

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]]
递归解题。从2开始遍历到sqrt(n),能被n整除就进下一个递归,当start超过sqrt(n)时,start变成n,进下一个递归。代码如下:

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));            }            return;        }                for (int i = start; i * i <= n; ++i) {            if (n % i == 0) {                item.add(i);                helper(result, item, n/i, i);                item.remove(item.size()-1);            }        }                int i = n;        item.add(i);        helper(result, item, 1, i);        item.remove(item.size()-1);    }}


0 0
原创粉丝点击