【刷题日记】357. 统计各位数字都不同的数字个数

简介: 本次刷题日记的第 30 篇,力扣题为:357. 统计各位数字都不同的数字个数 ,中等

【刷题日记】357. 统计各位数字都不同的数字个数

本次刷题日记的第 30 篇,力扣题为:357. 统计各位数字都不同的数字个数中等

一、题目描述:

image.png

兄弟们,今天查漏洞有点晚,回来继续刷题,还好早上看过这道题,已经有了一定的思路,现在就来瞅瞅吧


二、这道题考察了什么思想?你的思路是什么?

这道题题目信息比较明确,内容也比较少,就是题目给出一个具体的范围,左闭右开区间,找出该范围中每个位上数字不同数字的种类和

这个数字的范围最大是 10 的 8 次方,也就是 1 后面有 8 个 0

题目明确,乍一看,好像思路不太明确哈,一时间可能还拿不住


没事,我们可以来推理一下,就明白了,这个其实是一个数学题,还记得咱们在高中还是初中的时候,就解过这样的数学题

image.png

那么我们同理就可以得出

n = 3  的时候,3 位数的时候,符合条件的就有 9*9*8  =  648 种 种,再加上前面的 91 种,那么就是 739 种

image.png

这样子,我们可以可以明白,其实这就是一个数学题,一个排列组合的题目

这下子这个数学题就可以接出来了吧,接下来我们就可以按照思路来翻译代码了

三、编码

根据上述逻辑和分析,我们就可以翻译成如下代码,这里需要注意我们要清楚,对于多位的时候,需要注意每一个位上面可以出现不同数字的种数

编码如下:

func countNumbersWithUniqueDigits(n int) int {
    if n == 0 {
        return 1
    }
    if n == 1 {
        return 10
    }
    // 初始化好当 n等于 1 的时候,结果是 10中,并且当前的 1 位数的时候,符合条件的种数是 9,因为 0-9 中,第 1 位 不能是 0 开头
    res, cur := 10, 9
    for i := 0; i < n-1; i++ {
        // 第 1 位数,有 9 种,第 2 位有 9 种, 第 3 位 有 8 种,以此类推
        cur *= 9 - i
        res += cur
    }
    return res
}

四、总结:

这题代码量比较少,时间复杂度咱们不难看出,就是 O(n) ,循环的次数是 n-1 次,此处的空间复杂度是 O(1) ,我们引入的是常数级别的空间消耗

原题地址:357. 统计各位数字都不同的数字个数

今天就到这里,学习所得,若有偏差,还请斧正

欢迎点赞,关注,收藏

朋友们,你的支持和鼓励,是我坚持分享,提高质量的动力

image.png

好了,本次就到这里

技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。

我是阿兵云原生,欢迎点赞关注收藏,下次见~



相关文章
【力扣每日一题】1365. 有多少小于当前数字的数字
【力扣每日一题】1365. 有多少小于当前数字的数字
|
2月前
除夕日的每日一题(字符个数统计,多数元素)
除夕日的每日一题(字符个数统计,多数元素)
20 2
LeetCode-357 统计各位数字都不同的数字个数
LeetCode-357 统计各位数字都不同的数字个数
LeetCode-357 统计各位数字都不同的数字个数
|
10月前
|
机器学习/深度学习 Cloud Native
【刷题日记】2044. 统计按位或能得到最大值的子集数目
本次刷题日记的第 8 篇,力扣题为:2044. 统计按位或能得到最大值的子集数目 ,中等
|
11月前
|
存储 算法 Java
代码随想录训练营day25| 216.组合总和III 17.电话号码的字母组合
代码随想录训练营day25| 216.组合总和III 17.电话号码的字母组合
|
11月前
LeetCode刷题集(一)(LeetCode1684统计一致字符串的数目)
LeetCode刷题集(一)(LeetCode1684统计一致字符串的数目)
44 0
|
11月前
LeetCode刷题集(七)(2315.统计星号)
LeetCode刷题集(七)(2315.统计星号)
49 0
|
存储 算法
【题型总结】找到第n个自定义数 | 丑数系列 + 神奇数字
思路:对于对于任意一个丑数 x,其与任意的质因数(2、3、5)相乘,结果(2x、3x、5x)仍为丑数。因此可以使用优先队列(小根堆)存放丑数x,每次从队列取出最小值x,并将x所对应的2x、3x和5x入队。第n次出队的值即为第n个丑数
211 0
【题型总结】找到第n个自定义数 | 丑数系列 + 神奇数字
刷爆leetcode第十二期 0026 数组中数字出现的次数
刷爆leetcode第十二期 0026 数组中数字出现的次数
72 0
刷爆leetcode第十二期 0026 数组中数字出现的次数
LeetCode每日一题——1684. 统计一致字符串的数目
给你一个由不同字符组成的字符串 allowed 和一个字符串数组 words 。如果一个字符串的每一个字符都在 allowed 中,就称这个字符串是 一致字符串 。
58 0