码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • LeetCode每日一题(1012. Numbers With Repeated Digits)


    Given an integer n, return the number of positive integers in the range [1, n] that have at least one repeated digit.

    Example 1:

    Input: n = 20
    Output: 1

    Explanation: The only positive number (<= 20) with at least 1 repeated digit is 11.

    Example 2:

    Input: n = 100
    Output: 10

    Explanation: The positive numbers (<= 100) with atleast 1 repeated digit are 11, 22, 33, 44, 55, 66, 77, 88, 99, and 100.

    Example 3:

    Input: n = 1000
    Output: 262

    Constraints:

    • 1 <= n <= 109

    整体上我们反过来想, 至少重复 2 位的数字的数量=总数-没有重复数字的数量, 那我们只要算出所有没有重复数字的数量就可以了。这部分我们又可以分为两部分。 一部分是位数小于 n 的, 这部分直接计算就可以,每一位可选的数字数量相乘即可,但是要注意减去开头是 0 的情况。另一部分是位数等于 n 的, 这里我们整体上还是按每一位可选数字数量来算, 但是要注意,如果前 m 位都跟 n[…m]的数字相等, 那当前位数字的可选范围就是从 0 到 n[m+1], 因为如果我们选择比 n[m+1]大的数字,那整体是肯定要>n 的,也就是超出范围了。同时我们还需要维护当前剩余的可选数字, 因为每个数字只能使用一次, 前面的位使用了,那当前位就不能再使用, 这一点我们通过 bit mask 来实现, 因为最多一共就 10 个可选的数字, 从 0 到 9


    
    use std::collections::HashMap;
    
    impl Solution {
       
        fn rc(
            digits: &[i32],
            pos: usize,
            is_equal: bool,
            choices: i32,
            cache: &mut HashMap<(usize, bool, i32), i32>,
        ) -> i32 {
       
            if pos == digits.len() {
       
                return 1;
            }
            let mut ans = 0;
            // 第一位的情况, 可选数字不能包括0
            if pos == 0 {
       
                for d in 1..=digits[pos] {
       
                    if choices &
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
  • 相关阅读:
    ASP.NET Core Web API入门之一:创建新项目
    Verilog实战学习到RiscV - 3 : ICEStick 评估板点灯
    web前端之JavaScript的插件下载指令及介绍、npm、install、save、require
    C++11之初始化列表
    使用 FastGPT 构建高质量 AI 知识库
    cookie和session
    昇思MindSpore安装教程
    C# PSO 粒子群优化算法 遗传算法 随机算法 求解复杂方程的最大、最小值
    python基于django的健身资讯网站 vue
    如何将多个PDF文件合并一步完成?
  • 原文地址:https://blog.csdn.net/wangjun861205/article/details/128061476
  • 最新文章
  • 分享一个CAN报文编辑器软件
    MiniCPM-V 4.6 部署实战:基于 GPUStack 与 SGLang 的端侧多模态模型部署
    用 FRP 打通云服务器与本地 Ubuntu,让 Codex 远程调试本地硬件
    软考 - 架构设计师 知识点总结
    给 FastApiAdmin 加个“会议纪要”模块,我把后端二次开发的坑踩了个遍
    聊一聊 MES系统如何实现多种标签打印并支持不同打印机
    断尺问题:戴德金分割现实悖论
    给句子做个“语义审计”:从词向量到句子向量的方法论
    当AI“卡壳”在生产环境:MCP Server 如何帮我们破局
    ofdkit-harmony 0.2.0 发布:鸿蒙原生 OFD 阅读库,已上架 ohpm
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号