You are given an integer array coins of distinct denominations and an integer amount. Return the number of combinations that make up amount. You may use each coin an unlimited number of times. If no combination works, return 0.
Combinations are unordered: {1,2} and {2,1} count once.