要求
整数可以被看作是其因子的乘积。
例如:
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
解题思路:我们使用递归的方式,将一个大问题转化成子问题进行求解,18可以分解成2,9,结果之一就是[2,9],同时9又可以分解成[3,3],所以另一个结果就是[2,3,3],这个题的方法比较耗时,后续优化改进。