Count Numbers with Unique Digits LeetCode solution in C++
1// Recursion2class Solution {3public:4int solve(int n) {5if (n == 0) return 1;6int tmp = 9;7int ans = 9;8for (int i = 1; i < n; i++) ans *= tmp--;9return dp[n] = ans + solve(n - 1);10}11int countNumbersWithUniqueDigits(int n) {12return solve(n);13}14};1516// Memoization17class Solution {18public:19int dp[9] = {1};20int solve(int n) {21if (n == 0 || dp[n] != 0) return dp[n];22int tmp = 9;23int ans = 9;24for (int i = 1; i < n; i++) ans *= tmp--;25return dp[n] = ans + solve(n - 1);26}27int countNumbersWithUniqueDigits(int n) {28return solve(n);29}30};31// Dynamic Programming32class Solution {33public:34int countNumbersWithUniqueDigits(int n) {35int sum = 1, c = 9;36vector<int> dp(n + 2);37dp[0] = 1, dp[1] = 10;38for (int i = 2; i <= n; i++) {39dp[i] = dp[i - 1] * c + sum;40sum += dp[i - 1];41c--;42}43return dp[n];44}45};