Question:
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:
- You may assume that n is always positive.
- 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] ]
Solution:
public class Solution {
public List<List<Integer>> getFactors(int n) {
List<List<Integer>> result = new ArrayList<List<Integer>>();
dfs(result, new ArrayList<Integer>(), n, 2);
return result;
}
public void dfs(List<List<Integer>> result, List<Integer> tmp, int target, int start)
{
if(target==1)
{
if(tmp.size()>1)
result.add(new ArrayList<Integer>(tmp));
return;
}
else
{
for(int i=start;i<=target;i++)
{
if(target%i==0)
{
tmp.add(i);
dfs(result,tmp,target/i,i);
tmp.remove((Integer)i);
//tmp.remove(tmp.size()-1);
}
}
}
}
}