Loading... ```java int f(int i, int mask, boolean isLimit, boolean isNum) { if (i == s.length) return isNum ? 1 : 0; // isNum 为 true 表示得到了一个合法数字 if (!isLimit && isNum && memo[i][mask] != -1) return memo[i][mask]; int res = 0; if (!isNum) // 可以跳过当前数位 res = f(i + 1, mask, false, false); int up = isLimit ? s[i] - '0' : 9; // 如果前面填的数字都和 n 的一样,那么这一位至多填数字 s[i](否则就超过 n 啦) for (int d = isNum ? 0 : 1; d <= up; ++d) // 枚举要填入的数字 d if ((mask >> d & 1) == 0) // d 不在 mask 中 res += f(i + 1, mask | (1 << d), isLimit && d == up, true); if (!isLimit && isNum) memo[i][mask] = res; return res; } 作者:灵茶山艾府 链接:https://leetcode.cn/problems/count-special-integers/solutions/1746956/shu-wei-dp-mo-ban-by-endlesscheng-xtgx/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 ``` Last modification:March 14, 2024 © Allow specification reprint Like 0 如果觉得我的文章对你有用,请随意赞赏
Comment here is closed