力扣每日一题357. 统计各位数字都不同的数字个数

该博客讨论了如何解决LeetCode第357题,即统计所有位数不同的数字个数。博主指出,当n值较小时可以直接返回结果,而对于较大的n值,可以通过观察发现这是一个排列组合问题。博主通过分析得出公式,并用C语言实现了代码,成功解决了问题。
摘要由CSDN通过智能技术生成

在这里插入图片描述
这个题目,打眼一看,需要你返回一个每个位都不同的数字,而这个数字的取值范围是0<=x<=10^n

按照惯性思维,我当时是想要直接暴力遍历一下,但是注意到了一个点,n的取值范围,如果n=8,那么这个10^n就太大了,遍历一遍实际上是不可行的。

但是我们可以先观察。

在这里插入图片描述

在n数值很小的时候,我们可以发现规律,n=0,那么x就只好为0了,而0是很显然符合要求。

n=1,范围就更大了一些,但是注意!x是小于10^n,而不可以等于!
所以,x就可以取值0----9,总共十个数字,也是最简单朴素的一位数。

但是当n=2以后,就出现了分支!
在这里插入图片描述
在这里插入图片描述

我们把每个位单独拎出来处理,会发现,当十位数取一个值,个位数还能再取10-1中,也就是说,2位数有9*9=81种每个位互不相同的数字!
再加上1位数的10种,总共是91种!

当n=3时,我们发现,3位数还在2位数的基础上再乘10-1-1=8,得到了648种结果,再加上1位数和2位数的结果,总共有739种结果!

我们发现,这是不是排列组合啊!!

那么以此类推,
我们可以得到一条数学推论:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值