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 integernand return all possible combinations of its factors.
Note:
- You may assume that n is always positive. 
- Factors should be greater than 1 and less than n. 
input:
32
output:
[
  [2, 16],
  [2, 2, 8],
  [2, 2, 2, 4],
  [2, 2, 2, 2, 2],
  [2, 4, 4],
  [4, 8]
]import math
class Solution(object):
    def getFactors(self, n):
        """
        :type n: int
        :rtype: List[List[int]]
        """
        retList = []
        if not n:
            return []
        self.solve(n, retList, [], 2)
        return retList
        #return self.solve([], n, [], 2)
    '''
    def solve(self, ret, n, sofar, start):
        if sofar:
            ret.append(sofar + [n])
            #print 'ret: ', ret
        for i in range(start, int(math.sqrt(n))+1):
            if n % i == 0:
                #print 'sofar: ', sofar + [i]
                self.solve(ret, n/i, sofar+[i], i)
        return ret
    '''
    def solve(self, n, retList, curList, start):
        if curList:
            # both of these works
            #retList += [curList[:] +[n]]
            retList += [curList + [n]]
            #print 'retList: ', retList
        for i in xrange(start, int(math.sqrt(n)) + 1):
            if n % i == 0:
                #curList += [i]
                self.solve(n/i, retList, curList + [i], i)
                #curList.pop()Last updated
Was this helpful?