357 计算每个数字不同的个位数(排列和组合)
最编程
2024-07-03 11:29:14
...
1、题目描述
给定一个非负整数 n,计算各位数字都不同的数字 x 的个数,其中 0 ≤ x < 10n 。
2、示例
输入: 2
输出: 91
解释: 答案应为除去 11,22,33,44,55,66,77,88,99 外,在 [0,100) 区间内的所有数字。
3、题解
基本思想:排列组合,组成n位数各个位上数字都不同的组合方式,当n=4,cur=9*9*8*7,以此类推
#include<iostream>
#include<vector>
#include<algorithm>
#include<set>
#include<map>
#include<math.h>
using namespace std;
class Solution {
public:
int countNumbersWithUniqueDigits(int n) {
//基本思想:排列组合,组成n位数各个位上数字都不同的组合方式,当n=4,cur=9*9*8*7
int res=0;
n=n>10?10:n;
while(n>0)
{
if(n==1)
res+=10;
else
{
int cur=9,cnt=n-1;
for(int i=9;cnt>0;cnt--,i--)
cur*=i;
res+=cur;
}
n--;
}
return res;
}
};
int main()
{
Solution solute;
int n=3;
cout<<solute.countNumbersWithUniqueDigits(n)<<endl;
return 0;
}
上一篇: 迷人的算法 - 排列组合
下一篇: 输出所有可能的五位数
推荐阅读
-
357 计算每个数字不同的位数(递归、组合式)
-
357 计算每个数字不同的个位数(排列和组合)
-
Python 编码及运算符详细讲解-在计算机硬件中,编码(coding)是指用代码来表示各组数据资料,使其成为可利用计算机进行处理和分析的信息。代码是用来表示事物的记号,它可以用数字、字母、特殊的符号或它们之间的组合来表示。 2.编码的种类(常用种类) ①ASCCI 1.ASCCI的产生 在计算机中,所有的数据在存储和运算时都要使用二进制数表示(因为计算机用高电平和低电平分别表示1和0),例如,像a、b、c、d这样的52个字母(包括大写)、以及1等数字还有一些常用的符号(例如*、#、@等)在计算机中存储时也要使用二进制数来表示,而具体用哪些二进制数字表示哪个符号,当然每个人都可以约定自己的一套(这就叫编码),而大家如果要想互相通信而不造成混乱,那么大家就必须使用相同的编码规则,于是美国有关的标准化组织就出台了ASCII编码,统一规定了上述常用符号用哪些二进制数来表示。 2.ASCCI的表述 ASCII 码使用指定的7 位或8 位二进制数组合来表示128 或256 种可能的字符。标准ASCII 码也叫基础ASCII码,使用7 位二进制数(剩下的1位二进制为0)来表示所有的大写和小写字母,数字0 到标点符号, 以及在美式英语中使用的特殊控制字符。 字母A用ASCII编码是十进制的65,二进制的01000001; ②unicode 1.Unicode的产生