求所有因子的组合 力扣254

从小到大,分层进行dfs

class Solution {
    List<List<Integer>> dfs(int n, int l) {
        //返回的是所有因子大于l的n的因子组合
        //l限制了后面加入的因子一定是大于之前,避免了重复
        List<List<Integer>> ret = new ArrayList<List<Integer>>();
        int i = l;
        while (i * i <= n) {
            if (n % i == 0) {
                ret.add(new ArrayList<Integer>(Arrays.asList(i, n / i)));
                //i本身
                for (List<Integer> list : dfs(n / i, i)) {
                    list.add(i);
                    ret.add(list);
                }
            }
            ++i;
        }

        return ret;
    }

    public List<List<Integer>> getFactors(int n) {
        return dfs(n, 2);
    }
}
全部评论

相关推荐

点赞 1 评论
分享
牛客网
牛客企业服务