给出c++代码,以及注释
时间: 2023-10-20 07:28:41 浏览: 37
c++代码
```c++
#include <iostream>
#include <vector>
#include <unordered_set>
using namespace std;
class Solution {
public:
int countNumbersWithUniqueDigits(int n) {
if (n == 0) return 1; // 如果 n=0,则只有一种表示方法,即 0
int res = 0;
vector<int> nums(10);
dfs(n, 0, nums, res);
return res;
}
// 回溯函数,递归枚举每一位数字的取值
void dfs(int n, int k, vector<int>& nums, int& res) {
if (k == n) {
res++;
return;
}
for (int i = 0; i <= 9; i++) {
if (k == 0 && i == 0) continue; // 第一位数字不能为0
if (!isValid(nums, i)) continue; // 判断数字是否已经出现过
nums[k] = i;
dfs(n, k+1, nums, res);
nums[k] = -1; // 回溯
}
}
// 判断数字是否已经出现过
bool isValid(vector<int>& nums, int val) {
for (int num : nums) {
if (num == val) return false;
}
return true;
}
};
int main() {
Solution s;
int n = 2;
int res = s.countNumbersWithUniqueDigits(n);
cout << res << endl;
return 0;
}
```
代码中使用了一个 `isValid` 函数来判断数字是否已经出现过,这个函数可以使用 unordered_set 来实现,也可以使用一个数组来实现。
阅读全文