input: Write a function to find all unique combinations of numbers that sum up to a target.
  assert find_combinations([2, 3, 6, 7], 7) == [[2, 2, 3], [7]]
  assert find_combinations([2, 3, 5], 8) == [[2, 2, 2, 2], [2, 3, 3], [3, 5]]
  assert find_combinations([1], 2) == [[1, 1]]
output: def find_combinations(candidates, target):
      def backtrack(remain, comb, start):
          if remain == 0:
              result.append(list(comb))
              return
          elif remain < 0:
              return
          
          for i in range(start, len(candidates)):
              comb.append(candidates[i])
              backtrack(remain - candidates[i], comb, i)
              comb.pop()
      
      result = []
      backtrack(target, [], 0)
      return result