leetcode_254 因子的组合

122 阅读1分钟

要求

整数可以被看作是其因子的乘积。

例如:

8 = 2 x 2 x 2; = 2 x 4. 请实现一个函数,该函数接收一个整数 n 并返回该整数所有的因子组合。

注意:

你可以假定 n 为永远为正数。
因子必须大于 1 并且小于 n。

示例 1:

输入: 1
输出: []

示例 2:

输入: 37
输出: []

示例 3:

输入: 12
输出:
[
  [2, 6],
  [2, 2, 3],
  [3, 4]
]

示例 4:

输入: 32
输出:
[
  [2, 16],
  [2, 2, 8],
  [2, 2, 2, 4],
  [2, 2, 2, 2, 2],
  [2, 4, 4],
  [4, 8]
]

核心代码

class Solution:
    def getFactors(self, n: int) -> List[List[int]]:
        res = []
        for i in range(2, int(n ** 0.5) + 1):
            if n % i  == 0:
                comb = sorted([i,n // i])
                if comb not in res:
                    res.append(comb)
                
                for item in self.getFactors(n // i):
                    comb = sorted([i] + item)
                    if comb not in res:
                        res.append(comb)
        return res

image.png

解题思路:我们使用递归的方式,将一个大问题转化成子问题进行求解,18可以分解成2,9,结果之一就是[2,9],同时9又可以分解成[3,3],所以另一个结果就是[2,3,3],这个题的方法比较耗时,后续优化改进。