f[i] 表示凑出 i 的所有方案数。按照每种方案的最后一个数是什么划分子问题。当最后一个数是 a[j] 时,考虑如何凑出 i - a[j],方案的数量等于 f[i - a[j]]。 12345678910111213141516class Solution { public: int combinationSum4(vector<int>& nums, int m) { vector<unsigned> f(m + 1); // f[i] 表示凑出 i 的所有方案数 f[0] = 1; for (int i = 1; i <= m; i++) { for (auto j : nums) { if (i >= j) { f[i] += f[i - j]; } } } return f[m]; }};