每日算法系列【LeetCode 357】计算各个位数不同的数字个数

简介: 给定一个非负整数 n ,计算各位数字都不同的数字 x 的个数。

题目描述


image.png

示例1

输入:
2
输出
:91解释:
答案应为除去 11,22,33,44,55,66,77,88,99 外,在 [0,100) 区间内的所有数字。

题解

这题要求所有数位数字都不相同的数字个数,那么我们可以将答案分成不同长度。

方法1


image.png

方法2


因为 n 不会太大,所以我们可以本地将每个 n 对应的答案算出来,然后保存到数组里,提交的时候直接取答案就行了。这种方法非常投机取巧,适合直接做会超时,但是答案数量又不是太多的情况。

代码

方法1(c++)


class Solution {
   public:
   int countNumbersWithUniqueDigits(int n) {       
   int fact[10] = {1, 1, 2, 6, 24, 120, 720, 5040, 40320, 362880};       int res = 0; 
   for (int i = 10-n; i <= 9; ++i) {
   res += fact[9] / fact[i];
   } 
   return res * 9 + 1;
  }
};

方法1(python)


class Solution: 
    def countNumbersWithUniqueDigits(self, n: int) -> int:
    fact = [1, 1, 2, 6, 24, 120, 720, 5040, 40320, 362880]        
    res = 0 
    for i in range(10-n, 10):
    res += int(fact[9] / fact[i])
    return res * 9 + 1

方法2(c++)


class Solution {
    public:
    int countNumbersWithUniqueDigits(int n) {
    int res[] = {1, 10, 91, 739, 5275, 32491, 168571, 712891, 
    2345851, 5611771}; 
    return res[n];
    }
};

方法2(python)


classSolution: 
defcountNumbersWithUniqueDigits(self, n: int) ->int: 
res= [1, 10, 91, 739, 5275, 32491, 168571, 712891, 2345851, 5611771] 
returnres[n]

后记

这题还可以用递归、解出和式的通式等方法求解,本质上没有太大区别。

image.png

作者简介:godweiyang知乎同名华东师范大学计算机系硕士在读,方向自然语言处理与深度学习喜欢与人分享技术与知识,期待与你的进一步交流~

相关文章
|
1天前
|
算法 Java
[Java·算法·简单] LeetCode 283. 移动零
[Java·算法·简单] LeetCode 283. 移动零
10 2
|
1天前
|
算法 Java
[Java·算法·中等] LeetCode21. 合并两个有序链表
[Java·算法·中等] LeetCode21. 合并两个有序链表
9 2
|
3天前
|
算法 C++
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题-2
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题
|
3天前
|
算法 C++
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题-1
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题
|
4天前
|
存储 算法 调度
力扣中级算法(Python)
力扣中级算法(Python)
|
5天前
|
算法
【经典LeetCode算法题目专栏分类】【第11期】递归问题:字母大小写全排列、括号生成
【经典LeetCode算法题目专栏分类】【第11期】递归问题:字母大小写全排列、括号生成
|
5天前
|
算法
【经典LeetCode算法题目专栏分类】【第10期】排序问题、股票问题与TOP K问题:翻转对、买卖股票最佳时机、数组中第K个最大/最小元素
【经典LeetCode算法题目专栏分类】【第10期】排序问题、股票问题与TOP K问题:翻转对、买卖股票最佳时机、数组中第K个最大/最小元素
|
5天前
|
算法
【经典LeetCode算法题目专栏分类】【第9期】深度优先搜索DFS与并查集:括号生成、岛屿问题、扫雷游戏
【经典LeetCode算法题目专栏分类】【第9期】深度优先搜索DFS与并查集:括号生成、岛屿问题、扫雷游戏
|
3天前
|
算法 JavaScript 决策智能
基于禁忌搜索算法的TSP路径规划matlab仿真
**摘要:** 使用禁忌搜索算法解决旅行商问题(TSP),在MATLAB2022a中实现路径规划,显示优化曲线与路线图。TSP寻找最短城市访问路径,算法通过避免局部最优,利用禁忌列表不断调整顺序。关键步骤包括初始路径选择、邻域搜索、解评估、选择及禁忌列表更新。过程示意图展示搜索效果。
|
4天前
|
机器学习/深度学习 算法
基于BP神经网络和小波变换特征提取的烟草香型分类算法matlab仿真,分为浓香型,清香型和中间香型
```markdown 探索烟草香型分类:使用Matlab2022a中的BP神经网络结合小波变换。小波分析揭示香气成分的局部特征,降低维度,PCA等用于特征选择。BP网络随后处理这些特征,以区分浓香、清香和中间香型。 ```