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.