来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/count-numbers-with-unique-digits

题目描述

给你一个整数 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

解题思路

看了下n只有9个取值,皮一下直接暴力枚举0-8的结果。

其实是个排列组合问题,对于n = 0 来说,只有0这个数字,对于n = 1来说,存在0-9这10个数字,对于n > 1的情况来说,符合条件的结果就是n-1的情况再加上位数为n的情况,其中位数为n的情况可以使用排列组合来解,第一位不能为0所以有9个数字候选,第二位不能与第一位相同,所以有9个数字可选,第三位不能和第一第二位相同所以有8个数字可选以此类推,所以an = an-1 + 9 * 9 *  ……* (11 - n)。

代码展示

暴力枚举:

class Solution {
public:
int countNumbersWithUniqueDigits(int n) {
int iRet = 0;
switch(n)
{
case 0:
iRet = 1;
break;
case 1:
iRet = 10;
break;
case 2:
iRet = 91;
break;
case 3:
iRet = 739;
break;
case 4:
iRet = 5275;
break;
case 5:
iRet = 32491;
break;
case 6:
iRet = 168571;
break;
case 7:
iRet = 712891;
break;
case 8:
iRet = 2345851;
break;
}
return iRet;
}
};

排列组合:

class Solution {
public:
int countNumbersWithUniqueDigits(int n) {
int iRet = 10;
if(n == 0) return 1;
if(n == 1) return 10;
for(int i = 2; i <= n; i++)
{
int iTemp = 1;
for(int j = 9; j > 10 - i; j--)
iTemp *= j;
iRet = iRet + 9 * iTemp;
}
return iRet;
}
};

运行结果

LeetCode-357 统计各位数字都不同的数字个数的更多相关文章

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

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

  2. leetcode 357. 计算各个位数不同的数字个数(DFS,回溯,数学)

    题目链接 357. 计算各个位数不同的数字个数 题意: 给定一个非负整数 n,计算各位数字都不同的数字 x 的个数,其中 0 ≤ x < 10n . 示例: 输入: 2 输出: 91 解释: 答 ...

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

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

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

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

  5. LeetCode OJ String to Integer (atoi) 字符串转数字

    #include <iostream> #include <assert.h> using namespace std; int ato(const char *str) { ...

  6. LeetCode:137. 只出现一次的数字 II

    LeetCode:137. 只出现一次的数字 II 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现了三次.找出那个只出现了一次的元素. 说明: 你的算法应该具有线性时间复杂度. ...

  7. 用MFC完成一个简单的猜数字游戏: 输入的四位数中,位置和数字都正确为A,数字相同而位置不同的为B。

    最近学习了MFC一些比较基础的知识,所以打算通过做一个简单的数字游戏来理解MFC的流程并进一步熟悉其操作. 在这里,我做了一个猜数字的小游戏.第一步当然是设计主界面,先给大家展示一下游戏界面: 主界面 ...

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

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

  9. C语言习题1.分别统计一下其中字母,数字,其他字符的个数。将统计的字母,数字,其他字符的个数以柱状图的形式打印

    从键盘上输入字符,(1)分别统计一下其中字母,数字,其他字符的个数, (2)将统计的字母,数字,其他字符的个数以柱状图的形式打印.例如 5 ***** *****     3 *****   **** ...

  10. 一串数字中,只有一个数字出现一次,其他数字都出现两次,查找出这个数字(python)(原创)

    背景: 电话面试&手撕代码 2019.03.22 Mufasa 问题: 一串数字中,只有一个数字出现一次,其他数字都出现两次,查找出这个数字 条件: 这串数字是有序数 解决方法: 核心代码只有 ...

随机推荐

  1. Redis Zset实现统计模块

    1. 背景 公司有一个配置中心系统,使用MySQL存储了大量的配置,但现在不清楚哪些配置正在线上使用,哪些已经废弃了,所以需要实现一个统计模块,实现以下两个功能: 查看总体配置的数量以及活跃的数量 查 ...

  2. Day33:String类及其常用方法详解

    String类 1.1 String类概述 Java中字符串属于对象,String类用于创建和操作字符串. 最简单的字符串创建:直接通过String创建 String str="工地佬&qu ...

  3. go-carbon 1.5.0 版本发布,修复已知 bug 和新增德语翻译文件

    carbon 是一个轻量级.语义化.对开发者友好的golang时间处理库,支持链式调用. 目前已被 awesome-go 收录,如果您觉得不错,请给个star吧 github:github.com/g ...

  4. 【数据结构与算法】希尔排序 python和c++实现

    算法思路 每一次:固定间隔把数据分组,每一组进行排序 每次比上次选取更小的间隔分组,再每组排序,直到间隔为1 代码 c++:(越看越不明白了,后看) int gap = length;//length ...

  5. Mysql-delete语句

    ` 点击查看代码 删除2天之前的所有数据 delete From lkt_files_record where DATE(add_time) <= DATE(DATE_SUB(NOW(),INT ...

  6. Linux 下使用Docker 安装 LNMP环境 超详细

    首先在阿里云购买了一台服务器 选择了华南-深圳地区 操作系统选用了 CentOS8.0 64位 1. 初始化账号密码 登陆xshell,开始装Docker 一.安装docker 1.Docker 要求 ...

  7. 【机器学习】李宏毅——Anomaly Detection(异常检测)

    异常检测概述 首先要明确一下什么是异常检测任务.对于异常检测任务来说,我们希望能够通过现有的样本来训练一个架构,它能够根据输入与现有样本之间是否足够相似,来告诉我们这个输入是否是异常的,例如下图: 那 ...

  8. 8000字详解Thread Pool Executor

    摘要:Java是如何实现和管理线程池的? 本文分享自华为云社区<JUC线程池: ThreadPoolExecutor详解>,作者:龙哥手记 . 带着大厂的面试问题去理解 提示 请带着这些问 ...

  9. uniapp安装和使用

    工具安装 开发uni-app需要安装HBuilder X. 下载地址:https://www.dcloud.io/hbuilderx.html. 下载成功后直接解压即可 创建第一个uni-app 点击 ...

  10. BZOJ4919 大根堆(树形dp+线段树合并)

    用 multiset 启发式合并贪心维护 LIS 的做法就不多说了,网上题解一大堆,着重讲一下线段树合并维护 \(dp\). \(O(n^2)\) 的 \(dp\) 非常显然.离散化后,设 \(dp[ ...