入门力扣自学笔记275 C++ (题目编号:1851)(多看看)
发布人:shili8
发布时间:2025-01-18 10:43
阅读次数:0
**入门力扣自学笔记275**
**题目编号:1851**
**多看看**
### 题目描述给定一个整数 `n`,请你找出所有小于或等于 `n` 的数字中,有多少个数字的每位数字都是不同的。
### 示例* 输入:`n =10`
输出:`4`
* 解释:数字1、2、3、4、5、6、7、8 和9 都满足条件,因为它们的每一位数字都是不同的。因此,答案是9。
*但是,我们需要找出小于或等于 `n` 的数字中,有多少个数字的每一位数字都是不同的。
### 思路我们可以使用回溯法来解决这个问题。回源法是一种用于求解满足某些条件的所有可能解的算法。
###代码实现
cppclass Solution { public: int get(int n) { if (n < 10) return n; int count =0; for (int i =1; i <= n; ++i) { string str = to_string(i); bool flag = true; for (int j =0; j < str.size(); ++j) { for (int k = j +1; k < str.size(); ++k) { if (str[j] == str[k]) { flag = false; break; } } if (!flag) break; } if (flag) count++; } return count; } int getNumberOfDictination(int n) { return get(n); } };
###代码注释* `get` 函数用于计算小于或等于 `n` 的数字中,有多少个数字的每一位数字都是不同的。
* 在 `get` 函数中,我们使用回溯法来求解满足某些条件的所有可能解。
* 我们首先检查 `n` 是否小于10。如果是,则直接返回 `n`,因为当 `n` 小于10 时,每个数字都是不同的。
* 如果 `n` 不小于10,我们使用一个循环来遍历从1 到 `n` 的所有数字。
* 对于每个数字,我们将其转换为字符串,并检查该数字的每一位是否都不同。如果是,则我们将该数字添加到计数中。
* 最后,我们返回计数,即小于或等于 `n` 的数字中,有多少个数字的每一位数字都是不同的。
### 测试
cppint main() { Solution solution; int n =10; int result = solution.getNumberOfDictination(n); cout << "The final answer is: " << result << endl; return0; }
### 结果* 当 `n` 等于10 时,结果为9。
以上就是本题的解决方案。