题目:

给你一个整数 n ,统计并返回各位数字都不同的数字 x 的个数,其中 0 <= x < 10n 。

示例 1:

输入:n = 2
输出:91
解释:答案应为除去 11、22、33、44、55、66、77、88、99 外,在 0 ≤ x < 100 范围内的所有数字。
示例 2:

输入:n = 0
输出:1

提示:

  • 0 <= n <= 8

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/count-numbers-with-unique-digits
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路:【数学思维】

当n == 0时,10n == 1,满足条件的数字只有0,即为1个,f(0) = 1;

当n == 1时,10n == 10,满足条件的数字有0~9,即共10个,f(1) = 10;

当n == 2时,10n == 100,满足条件的数字分为两部分,一部分是n == 1时的10个数字,一部分是两位数的数字,相当于第一位数字在1~9(不能为前导零)中任取一个,第二个数字只能取与第一个数字不相同的其他9个数字;例如第一个数字取3,第二个数字只能取除3以外的数字。即为30,31,32,34,35,36,37,38,39,新增 9*9个数字,即 f(2) = f(1) + 9 * 9;

当n == 3时,10n == 1000,满足条件的数字分为三部分,一部分是n == 1时的10个数字,一部分是两位数的数字,就是9*9,一部分是三位数,只是第三位数可取的只能有8个即新增9*9*8,即 f(3) = f(1)+9*9+9*9*8=f(2)+9*9*8;

当n==4时,与n==3同理, f(4) = f(1)+9*9+9*9*8+9*9*8*7=f(3)+9*9*8*7;

根据规律,推导出通式:

f(n)= f(n-1)+[f(n-1)-f(n-2)]*[10-(n-1)]

推导草稿:

 代码:

 1 class Solution {
2 public int countNumbersWithUniqueDigits(int n) {
3 if(n == 0) return 1;
4 int[] f = new int[n+1];
5 f[0] = 1;
6 f[1] = 10;
7 for(int i = 2; i <= n; i++){
8 f[i] = f[i-1] +(f[i-1] - f[i-2]) * (10-(i-1));
9 }
10 return f[n];
11 }
12 }

力扣357(java)-统计各位数字都不同的数字个数(中等)的更多相关文章

  1. LeetCode-357 统计各位数字都不同的数字个数

    来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/count-numbers-with-unique-digits 题目描述 给你一个整数 n ,统 ...

  2. java统计英文字母、空格、数字和其它字符的数目

    package tes; import java.util.Scanner; //java统计英文字母,空格,数字和其它字符的数目 public class ZiFuTongJi { public s ...

  3. 力扣——single number (只出现一次的数字) python实现

    题目描述: 中文: 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次.找出那个只出现了一次的元素. 说明: 你的算法应该具有线性时间复杂度. 你可以不使用额外空间来实现吗? 英 ...

  4. 刷题-力扣-剑指 Offer 15. 二进制中1的个数

    剑指 Offer 15. 二进制中1的个数 题目链接 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/er-jin-zhi-zhong-1de- ...

  5. 力扣Leetcode 1248. 统计「优美子数组」

    统计「优美子数组」 给你一个整数数组 nums 和一个整数 k. 如果某个 连续 子数组中恰好有 k 个奇数数字,我们就认为这个子数组是「优美子数组」. 请返回这个数组中「优美子数组」的数目. 示例 ...

  6. Java 统计整数二进制中1的个数

    package cookie; public class CountBinary_1 { public static void main(String[] args) { System.out.pri ...

  7. 力扣Leetcode 面试题56 - I. 数组中数字出现的次数

    面试题56 - I. 数组中数字出现的次数 一个整型数组 nums 里除两个数字之外,其他数字都出现了两次.请写程序找出这两个只出现一次的数字.要求时间复杂度是O(n),空间复杂度是O(1). 示例 ...

  8. JAVA 统计字符串中中文,英文,数字,空格的个数

    面试题:输入一行字符,分别统计出其中英文字母.中文字符.空格.数字和其它字符的个数 可以根据各种字符在Unicode字符编码表中的区间来进行判断,如数字为'0'~'9'之间,英文字母为'a'~'z'或 ...

  9. Java经典案例之-“统计英文字母、空格、数字和其它字符的个数”

    /** * 描述:输入一行字符串,并且统计出其中英文字母.空格.数字和其它字符的个数. * 分析:利用for语句,条件为输入的字符不为 '\n ' * 作者:徐守威 */ package com.xu ...

  10. JAVA 统计字符串中中文,英文,数字,空格,特殊字符的个数

    引言 可以根据各种字符在Unicode字符编码表中的区间来进行判断,如数字为'0'~'9'之间,英文字母为'a'~'z'或'A'~'Z'等,Java判断一个字符串是否有中文是利用Unicode编码来判 ...

随机推荐

  1. SAE自动驾驶分级介绍

    SAE International 国际自动机工程师学会(原译:美国汽车工程师学会)英文全程为:Society of Automotive Engineers International,是一个全球性 ...

  2. Django使用Bootstrap的经典方法

    前面的话 Bootstrap是简单.灵活的用于搭建WEB页面的HTML.CSS.Javascript的工具集.Bootstrap基于HTML5和CSS3,具有漂亮的设计.友好的学习曲线.卓越的兼容性, ...

  3. OBS无法捕获 chrome、webkit、electron窗口,捕获后黑屏

    使用 electron 打包的 pc 应用,用于直播软件推流的 OBS 捕获窗体黑屏 现象:唯独chrome浏览器 edge 浏览器等,其它窗体都正常. 猜测:是由 chromium 内核引起的 修改 ...

  4. 喜报|3DCAT入选“灵境杯”深圳市最佳元宇宙案例!

    2022年11月10日~11日,2022全球元宇宙大会深圳站胜利召开,在本次大会上重磅发布"灵境杯"全球元宇宙创新大赛成果,公布深圳最具潜力元宇宙入选企业. 创新大赛结合" ...

  5. 记录--你不知道的Js高级方法

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前言 在Js中有一些比较冷门但是非常好用的方法,我在这里称之为高级方法,这些方法没有被广泛使用或多或少是因为存在一些兼容性的问题,不是所有 ...

  6. 记录--for in 和 for of的区别详解以及为for in的输出顺序

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 for in 和 for of 相对于大家肯定都不陌生,都是用来遍历属性的没错.那么先看下面的一个例子: 例1 const obj = { ...

  7. GO 协程【VS】C# 多线程【Go-C# Round 1】

    〇.前言 最近接触到 Go 语言相关的内容,由于之前都是用的 C# 语言,然后就萌生了对这两种语言进行多方面比较. 本文将在 Go 的优势项目协程,来与 C# 的多线程操作进行比较,看下差距有多大. ...

  8. C# Mat Bitmap互转

    var mat = OpenCvSharp.Extensions.BitmapConverter.ToMat(source);//bitmap转mat Cv2.CvtColor(mat, mat, C ...

  9. BeanUtils.copyProperties() 详解

    BeanUtils.copyProperties会进行类型转换:BeanUtils.copyProperties方法简单来说就是将两个字段相同的对象进行属性值的复制. 如果 两个对象之间存在名称不相同 ...

  10. KingbaseES Json 系列十一:Json数组操作函数

    KingbaseES Json 系列十一--Json数组操作函数(JSONB_ARRAY_ELEMENTS,JSONB_ARRAY_ELEMENTS_TEXT,JSONB_ARRAY_LENGTH,J ...