力扣357(java)-统计各位数字都不同的数字个数(中等)
题目:
给你一个整数 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)-统计各位数字都不同的数字个数(中等)的更多相关文章
- LeetCode-357 统计各位数字都不同的数字个数
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/count-numbers-with-unique-digits 题目描述 给你一个整数 n ,统 ...
- java统计英文字母、空格、数字和其它字符的数目
package tes; import java.util.Scanner; //java统计英文字母,空格,数字和其它字符的数目 public class ZiFuTongJi { public s ...
- 力扣——single number (只出现一次的数字) python实现
题目描述: 中文: 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次.找出那个只出现了一次的元素. 说明: 你的算法应该具有线性时间复杂度. 你可以不使用额外空间来实现吗? 英 ...
- 刷题-力扣-剑指 Offer 15. 二进制中1的个数
剑指 Offer 15. 二进制中1的个数 题目链接 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/er-jin-zhi-zhong-1de- ...
- 力扣Leetcode 1248. 统计「优美子数组」
统计「优美子数组」 给你一个整数数组 nums 和一个整数 k. 如果某个 连续 子数组中恰好有 k 个奇数数字,我们就认为这个子数组是「优美子数组」. 请返回这个数组中「优美子数组」的数目. 示例 ...
- Java 统计整数二进制中1的个数
package cookie; public class CountBinary_1 { public static void main(String[] args) { System.out.pri ...
- 力扣Leetcode 面试题56 - I. 数组中数字出现的次数
面试题56 - I. 数组中数字出现的次数 一个整型数组 nums 里除两个数字之外,其他数字都出现了两次.请写程序找出这两个只出现一次的数字.要求时间复杂度是O(n),空间复杂度是O(1). 示例 ...
- JAVA 统计字符串中中文,英文,数字,空格的个数
面试题:输入一行字符,分别统计出其中英文字母.中文字符.空格.数字和其它字符的个数 可以根据各种字符在Unicode字符编码表中的区间来进行判断,如数字为'0'~'9'之间,英文字母为'a'~'z'或 ...
- Java经典案例之-“统计英文字母、空格、数字和其它字符的个数”
/** * 描述:输入一行字符串,并且统计出其中英文字母.空格.数字和其它字符的个数. * 分析:利用for语句,条件为输入的字符不为 '\n ' * 作者:徐守威 */ package com.xu ...
- JAVA 统计字符串中中文,英文,数字,空格,特殊字符的个数
引言 可以根据各种字符在Unicode字符编码表中的区间来进行判断,如数字为'0'~'9'之间,英文字母为'a'~'z'或'A'~'Z'等,Java判断一个字符串是否有中文是利用Unicode编码来判 ...
随机推荐
- C++学习笔记之高级语法
目录 高级语法 面向对象--类 对象的属性 运算符重载 拷贝构造函数 IO缓存 头文件的重复包含问题 深拷贝与浅拷贝 面向对象三大特性 高级语法 面向对象--类 C++使用struct.class来定 ...
- 简单实用算法——位图算法(BitMap)
目录 算法原理 优点和缺点 算法实现(C#) 算法应用 参考文章 算法原理 BitMap的基本思想就是用一个bit位来标记某个元素对应的Value,而Key即是该元素.由于采用了Bit为单位来存储数据 ...
- 手爱图仕Aputure MC RGB摄影补光灯体验测评
前记 作为一个智能硬件设备狂兼智能硬件方案提供商,工作就是和各种智能硬件打交道.最近无意入手了一个爱图仕Aputure MC RGB摄影补光灯.顺便体验了几天,既然体验了,肯定要写一个体验结果的.这 ...
- 一个简易的ORM框架的实现(一)
一个简易的ORM框架的实现 ORM ORM---操作数据库---对象关系映射 ORM(Object Relational Mapping)框架采用元数据来描述对象与关系映射的细节.只要提供了持久化类与 ...
- day01-2-@RequestMapping和Rest
@RequestMapping和Rest 1.@RequestMapping 1.1基本使用 @RequestMapping注解可以指定 控制器(处理器) 的某个方法的请求url 1.2@Reques ...
- 公开的Webservice集锦
备注:以下所有的来自 互联网,版权归原作者所有 股票行情数据 WEB 服务(支持香港.深圳.上海基金.债券和股票:支持多股票同时查询) Endpoint: http://webservice.webx ...
- elasticsearch中runtime_mapping实战
背景:需要根据一个实时计算处理的结果值进行排序,数据从es中查询.(基于业务背景:佣金排序) es版本:7.17.1:spring-data-elasticsearch版本:4.3.9 方式一:mys ...
- ContiPerf是一个轻量级的测试工具,基于JUnit 4 开发,可用于效率测试等。
1.在maven中使用ContiPerf <dependency> <groupId>junit</groupId> <artifactId>junit ...
- KingbaseES数据库批量加载数据的最佳方法
前言 本文讨论在KingbaseES数据库服务器中批量加载数据的方法,以及空数据库中的初始数据加载和增量数据加载的最佳做法. 批量加载方法 以下数据加载方法按照从最耗时到最不耗时的顺序排列: 1.运行 ...
- JDBC访问KingbaseES数据库异常 -- 案例分析
应用使用jdbc访问KingbaseES数据库发生异常:SocketTimeoutException Read timed out 一.异常现象: 应用显示ERROR信息: Caused By: ja ...