[Locked] 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. Each combination‘s factors must be sorted ascending, for example: The factors of 2 and 6 is [2, 6], not [6, 2].
  2. You may assume that n is always positive.
  3. 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]
]

分析:

  因子需要枚举出来,直接DFS

代码:

void dfs(int target, int start, vector<int> item, vector<vector<int> > &fc) {
    if(target == 1) {
        //去除num = num ( * 1)的分解情况
        if(item.size() > 1)
            fc.push_back(item);
        return;
    }
    for(int i = start; i <= target; i++) {
        if(target % i == 0) {
            item.push_back(i);
            dfs(target / i, i, item, fc);
            item.pop_back();
        }
    }
    return;
}
vector<vector<int> > factor(int num) {
    vector<int> item;
    vector<vector<int> > fc;
    dfs(num, 2, item, fc);
    return fc;
}

 

posted @ 2016-02-26 15:15  CarlGoodman  阅读(176)  评论(0编辑  收藏  举报