arr = [1, 2, 2, 3, 5]
target = 8
def comb_sum(arr, current_index, target, result, ans):
if target == 0:
print result
ans.append(result)
return 0
if target < 0:
return 1
if current_index == len(arr):
return 1
result.append(arr[current_index])
comb_sum(arr, current_index+1, target - arr[current_index], result, ans)
result.pop()
comb_sum(arr, current_index+1, target, result, ans)
return ans
print comb_sum(arr, 0, target, [], [])
YXJyID0gWzEsIDIsIDIsIDMsIDVdCnRhcmdldCA9IDgKCmRlZiBjb21iX3N1bShhcnIsIGN1cnJlbnRfaW5kZXgsIHRhcmdldCwgcmVzdWx0LCBhbnMpOgogICAgaWYgdGFyZ2V0ID09IDA6CiAgICAgICAgcHJpbnQgcmVzdWx0CiAgICAgICAgYW5zLmFwcGVuZChyZXN1bHQpCiAgICAgICAgcmV0dXJuIDAKICAgIGlmIHRhcmdldCA8IDA6CiAgICAgICAgcmV0dXJuIDEKICAgIGlmIGN1cnJlbnRfaW5kZXggPT0gbGVuKGFycik6CiAgICAgICAgcmV0dXJuIDEKCiAgICByZXN1bHQuYXBwZW5kKGFycltjdXJyZW50X2luZGV4XSkKICAgIGNvbWJfc3VtKGFyciwgY3VycmVudF9pbmRleCsxLCB0YXJnZXQgLSBhcnJbY3VycmVudF9pbmRleF0sIHJlc3VsdCwgYW5zKQogICAgcmVzdWx0LnBvcCgpCgogICAgY29tYl9zdW0oYXJyLCBjdXJyZW50X2luZGV4KzEsIHRhcmdldCwgcmVzdWx0LCBhbnMpCiAgICByZXR1cm4gYW5zCgoKCnByaW50IGNvbWJfc3VtKGFyciwgMCwgdGFyZ2V0LCBbXSwgW10p
[1, 2, 2, 3]
[1, 2, 5]
[1, 2, 5]
[3, 5]
[[], [], [], []]