leetcode-357. Count Numbers with Unique Digits

本文介绍了一种使用动态规划方法解决计数问题的算法。针对输入整数n,该算法可以计算所有包含不同数字的数的数量,其中这些数位于0到10^n之间。文章详细解释了动态规划的应用,并给出了通过AC的C++代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Given a non-negative integer n, count all numbers with unique digits, x, where 0 ≤ x < 10n.

Example:
Given n = 2, return 91. (The answer should be the total numbers in the range of 0 ≤ x < 100, excluding [11,22,33,44,55,66,77,88,99])

题目的意思就是每一位上的数字都不能重复!!!动态规划思想:

class Solution {
public:
	int countNumbersWithUniqueDigits(int n) {
		if (n == 0)return 1;
		vector<int>re(n + 1, 0);
		re[1] = 10;
		for (int i = 2; i <= n; i++){
			int start = 9;
			int bit = i - 1;
			int sum = 0;
			int pro = 9;
			while (bit){
				pro = pro*start;
				start--;
				if(n>1)sum = sum + re[bit]-re[bit-1];
				else sum = sum + re[1];
				bit--;
			}
			re[i] = pro + sum;
		}
		return re[n];
	}
};

Submission Result: Accepted  More Details 
Share your acceptance!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值