leetcode 357

求互不相同的数的个数(范围:0<=x<10^n)

易知当n=0是,就一个0

当n=10时0-9

其余情况:

首先最高位可以使1-9

接下来哪一位与最高位不同,但是多了一个0,也是9位

接下来与次高位和最高位不同位8位

。7

。6

。1

 1 class Solution {
 2 public:
 3     int countNumbersWithUniqueDigits(int n) {
 4       if(n==0)return 1;
 5       if(n==1)return 10;
 6       int k=9,num=n,nextk=9;
 7       n--;
 8       while(n--) {
 9         k*=nextk;
10         nextk--;
11       }
12       num--;
13         return k+countNumbersWithUniqueDigits(num);
14     }
15 };
时间: 2024-10-23 03:43:30

leetcode 357的相关文章

leetCode 357. Count Numbers with Unique Digits | Dynamic Programming | Medium

357. Count Numbers with Unique Digits 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,3

Java [Leetcode 357]Count Numbers with Unique Digits

题目描述: 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]) 解题思路: This

LeetCode 357 Count Numbers with Unique Digits

题意: 给定一个非负数n,要求算出所有符合条件的x.要求 0 ≤ x < 10^n,并且x的各位都不相同. 题解: 当n=0时,0<=x<1,因此只有x=0一种情况. 当n=1时,0<=x<10,即0-9共10种情况. 当n>=2时,最高位为1-9共9种情况,第二位不能与上一位相同但可以为0,因此也是9种情况,下一位是8种情况以此类推. 应此结果是f(1)+f(2)+f(3)+....+f(n) 而f(k) = 9 * 9 * 8 * ... (9 - k + 2) (

【leetcode】357. Count Numbers with Unique Digits

题目描述: Given a non-negative integer n, count all numbers with unique digits, x, where 0 ≤ x < 10n. 解题分析: 题目要就就是找出 0≤ x < 10n中各位数字都不相同的数的个数.要接触这道题只需要理解: 1.设f(n)表示n为数字中各位都不相同的个数,则有countNumbersWithUniqueDigits(n)=f(1)+f(2)+……+f(n)=f(n)+countNumbersWithU

LeetCode.868-二进制距离(Binary Gap)

这是悦乐书的第333次更新,第357篇原创 01看题和准备 今天介绍的是LeetCode算法题中Easy级别的第203题(顺位题号是868).给定正整数N,找到并返回N的二进制表示中两个连续1之间的最长距离.如果没有连续两个1,则返回0.例如: 输入:22 输出:2 说明:22的二进制是10110.在22的二进制表示中,有三个1,第一对连续的1距离为2,第二对1的距离为1,答案是这两个距离中最大的一个,即2. 输入:5 输出:2 说明:5的二进制是101. 输入:6 输出:1 说明:6的二进制是

LeetCode.933-最近通话次数(Number of Recent Calls)

这是悦乐书的第357次更新,第384篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第219题(顺位题号是933).写一个类RecentCounter来计算最近的请求. 它只有一个方法:ping(int t),其中t代表一些时间(以毫秒为单位). 返回从3000毫秒前到现在为止的ping数. 在[t-3000,t]中任何时间ping都将计数,包括当前ping. 每次调用ping都使用比之前严格更大的t值.例如: 输入:inputs = ["RecentCounter&

[LeetCode] 349 Intersection of Two Arrays &amp; 350 Intersection of Two Arrays II

这两道题都是求两个数组之间的重复元素,因此把它们放在一起. 原题地址: 349 Intersection of Two Arrays :https://leetcode.com/problems/intersection-of-two-arrays/description/ 350 Intersection of Two Arrays II:https://leetcode.com/problems/intersection-of-two-arrays-ii/description/ 题目&解法

LeetCode 442. Find All Duplicates in an Array (在数组中找到所有的重复项)

Given an array of integers, 1 ≤ a[i] ≤ n (n = size of array), some elements appear twice and others appear once. Find all the elements that appear twice in this array. Could you do it without extra space and in O(n) runtime? Example: Input: [4,3,2,7,

LeetCode OJ - Sum Root to Leaf Numbers

这道题也很简单,只要把二叉树按照宽度优先的策略遍历一遍,就可以解决问题,采用递归方法越是简单. 下面是AC代码: 1 /** 2 * Sum Root to Leaf Numbers 3 * 采用递归的方法,宽度遍历 4 */ 5 int result=0; 6 public int sumNumbers(TreeNode root){ 7 8 bFSearch(root,0); 9 return result; 10 } 11 private void bFSearch(TreeNode ro