当前位置:实例文章 » JAVA Web实例» [文章]入门力扣自学笔记275 C++ (题目编号:1851)(多看看)

入门力扣自学笔记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。

以上就是本题的解决方案。

其他信息

其他资源

Top