题目链接

357. 计算各个位数不同的数字个数

题意:

给定一个非负整数 n,计算各位数字都不同的数字 x 的个数,其中 0 ≤ x < 10n 。

示例:

输入: 2

输出: 91

解释: 答案应为除去 11,22,33,44,55,66,77,88,99 外,在 [0,100) 区间内的所有数字。

思路

  • 法1:DFS+回溯

    前导0单独处理,其余位置按0~9顺序每次插入,用一个数组vis[10]记录已经用过的数字

  • 法2:数学

    设f[i]表示i位数的有效数字,比如f[1]=10,f[2]=9*9,f[3]=9*9*8,以此类推,f[i]=f[10](i>10),10个以上的数字必定重复

    最后结果就是f[1]+...+f[n](n<=10)或者f[1]+...+f[10]

    特判:n=0时,f[0]=1

class Solution {
public:
//法2:
int countNumbersWithUniqueDigits(int n){
if(n==0) return 1; vector<int> f(10,0);
f[1]=10;
f[2]=9*9;
for(int k=3;k<=10 && k<=n;k++){
f[k]=f[k-1]*(10-k+1);
} int ans=0;
for(int i=1;i<=n&& i<=10;i++) ans+=f[i]; return ans;
} //法1 :注意前导0
// int dfs(int n,vector<int> vis,int d){
// if(n==d) return 1;
// int ans=1;//前导0的情况
// for(int i=(d==0?1:0);i<=9;i++){
// if(vis[i]) continue;
// vis[i]=1;
// ans+=dfs(n,vis,d+1);
// vis[i]=0;
// }
// return ans;
// }
// int countNumbersWithUniqueDigits(int n) {
// if(n>=10) n=10;
// vector<int> vis(10,0); // return dfs(n,vis,0);
// // if(n>1) ans+=1; // // dfs(0,n);
// // return ans;
// }
};

leetcode 357. 计算各个位数不同的数字个数(DFS,回溯,数学)的更多相关文章

  1. Java实现 LeetCode 357 计算各个位数不同的数字个数

    357. 计算各个位数不同的数字个数 给定一个非负整数 n,计算各位数字都不同的数字 x 的个数,其中 0 ≤ x < 10n . 示例: 输入: 2 输出: 91 解释: 答案应为除去 11, ...

  2. Leetcode 357.计算各个位数不同的数字个数

    计算各个位数不同的数字个数 给定一个非负整数 n,计算各位数字都不同的数字 x 的个数,其中 0 ≤ x < 10n . 示例: 输入: 2 输出: 91 解释: 答案应为除去 11,22,33 ...

  3. [Leetcode] 第357题 计算各个位数不同的数字个数

    一.题目描述 给定一个非负整数 n,计算各位数字都不同的数字 x 的个数,其中 0 ≤ x < 10n . 示例: 输入: 2 输出: 91 解释: 答案应为除去 11,22,33,44,55, ...

  4. 357 Count Numbers with Unique Digits 计算各个位数不同的数字个数

    给定一个非负整数 n,计算各位数字都不同的数字 x 的个数,其中 0 ≤ x < 10n.示例:给定 n = 2,返回 91.(答案应该是除[11,22,33,44,55,66,77,88,99 ...

  5. [Swift]LeetCode357. 计算各个位数不同的数字个数 | Count Numbers with Unique Digits

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

  6. [Leetcode]315.计算右侧小于当前元素的个数 (6种方法)

    链接 给定一个整数数组 nums,按要求返回一个新数组 counts.数组 counts 有该性质: counts[i] 的值是  nums[i] 右侧小于 nums[i] 的元素的数量. 示例: 输 ...

  7. Leetcode 315.计算右侧小于当前元素的个数

    计算右侧小于当前元素的个数 给定一个整数数组 nums,按要求返回一个新数组 counts.数组 counts 有该性质: counts[i] 的值是  nums[i] 右侧小于 nums[i] 的元 ...

  8. Java实现 LeetCode 315 计算右侧小于当前元素的个数

    315. 计算右侧小于当前元素的个数 给定一个整数数组 nums,按要求返回一个新数组 counts.数组 counts 有该性质: counts[i] 的值是 nums[i] 右侧小于 nums[i ...

  9. [LeetCode] Count Numbers with Unique Digits 计算各位不相同的数字个数

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

随机推荐

  1. sqli-labs less11-12(post型union注入)

    less-11 post型union注入 过程: 输入admin admin 判断username password的闭合方式 对username查字段个数 ' union select 1,2# ' ...

  2. 【开源】基于 SpringBoot 的 web kettle 在线采集平台

    kettle-scheduler-boot 开发计划 序号 项目 状态 优先级 1 在线管理,编辑kettle脚本 紧急 2 通过源码实现集群,多线程执行任务 紧急 2 重构jpa部分,改为mybat ...

  3. pytorch和tensorflow的爱恨情仇之一元线性回归例子(keras插足啦)

    直接看代码: 一.tensorflow #tensorflow import tensorflow as tf import random import numpy as np x_data = np ...

  4. Spring(一)--简介

    一.概述(什么是spring): Spring是分层的Java SE/EE应用full-stack(一站式)轻量级开源框架.他解决的是业务逻辑层和其他各层的松耦合问题,将面向接口的编程思想贯穿整个系统 ...

  5. vue第四单元(初识vue-在页面中直接引入vue框架-学习使用vue语法-vue的指令-介绍data用法-methods用法)

    第四单元(初识vue-在页面中直接引入vue框架-学习使用vue语法-vue的指令-介绍data用法-methods用法) #课程目标 了解 vue 框架的特点 掌握创建 vue 实例 掌握 data ...

  6. wordpress 后台富文本编辑器,添加图片发现无法左对齐,样式出现混乱

    如上图所示,无法左对齐,但是左对齐的按钮全部是正确的,最后一点点排除,发现是因为这个词的影响,去掉就好了,原因不明,可能是这个词被当做某个方法执行了

  7. 只要肯下功夫,十岁也能学得会的 Docker 精简版!

    目录 一.Docker简介 1.1 什么是Docker 1.2 Docker中包括三个基本的概念 1.3 Docker组件 1.4 安装Docker 二.Docker常用命令 三.应用部署 3.1 m ...

  8. 5. 穿过拥挤的人潮,Spring已为你制作好高级赛道

    目录 ✍前言 版本约定 ✍正文 默认转换器注册情况 StreamConverter 代码示例 使用场景 兜底转换器 ObjectToObjectConverter part1:快速返回流程 part2 ...

  9. draggable()拖拽时限制移动区域

    jQuery-UI为我们提供了一个非常便捷的拖拽方法:draggable(),在使用此方法时,我们可能会希望控件只在某一区域中移动,不能被拖出边界,这样的话我们可以使用下面的方法: 调用draggab ...

  10. 深入理解MySQL系列之索引

    索引 查找一条数据的过程 先看下InnoDB的逻辑存储结构: 表空间:可以看做是InnoDB存储引擎逻辑结构的最高层,所有的数据都存放在表空间中.默认有个共享表空间ibdata1.如果启用innodb ...