整数可以被看作是其因子的乘积。
例如:
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]
]
思路:
这是一个典型的要用递归求解,因为大问题可以划分多个相同的子问题求解。
比如求12的解,先可以得到[2,6]这个答案,然后6又可以得到[2,3]这个答案,以此类推……
class Solution(object):
def getFactors(self, n):
"""
:type n: int
:rtype: 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