当前位置: 首页 > news >正文

2376. 统计特殊整数

Powered by:NEFU AB-IN

Link

文章目录

  • 2376. 统计特殊整数
    • 题意
    • 思路
    • 代码

2376. 统计特殊整数

题意

如果一个正整数每一个数位都是 互不相同 的,我们称它是 特殊整数 。

给你一个 正 整数 n ,请你返回区间 [1, n] 之间特殊整数的数目。

思路

详见灵神视频
https://leetcode.cn/problems/count-special-integers/solutions/1746956/shu-wei-dp-mo-ban-by-endlesscheng-xtgx/

class Solution:def countSpecialNumbers(self, n: int) -> int:# 将整数 n 转换为字符串表示,方便逐位处理。s = str(n)@lru_cache(None)  # 使用缓存机制来避免重复计算,提高效率。def dfs(i, mask, is_limit, is_num):"""使用深度优先搜索(DFS)和动态规划计算特殊数字的数量。参数:i (int): 当前处理的位数(在字符串 s 中的索引)。mask (int): 位掩码,用于表示目前已经使用的数字。每个位代表一个数字,位被设置为1表示该数字已使用。集合和二进制的转换关系is_limit (bool): 表示前面填的数字是否都是 n 对应位上的,如果为 true,那么当前位至多为 int(s[i]),否则至多为 9is_num (bool): 表示当前是否已经形成了一个有效的数字(避免前导零)。返回值:int: 从当前状态开始的有效特殊数字的数量。"""# 基础情况:如果已经处理完所有位。if i == len(s):# 如果已经形成了一个有效的数字(is_num 为 True),返回 1;否则返回 0。return int(is_num)# 初始化当前状态下的结果。res = 0# 如果还没有形成有效数字,可以选择跳过当前位。if not is_num:# 递归处理下一位,不形成数字。res = dfs(i + 1, mask, False, False)# 确定当前位的上限。# 如果 is_limit 为 True,当前位的数字不能超过 s[i];# 否则,当前位可以是 0 到 9 之间的任意数字。up = int(s[i]) if is_limit else 9# 确定当前位的下限。# 如果已经形成了一个数字,当前位可以从 0 开始;# 否则,为了避免前导零,当前位只能从 1 开始。down = 0 if is_num else 1# 尝试当前位的所有可能数字。for d in range(down, up + 1):# 检查当前数字 d 是否已经使用过(即 mask 中相应的位是否已设置)。if not 1 << d & mask:# 递归处理下一位,更新位掩码和限制条件。res += dfs(i + 1, mask | 1 << d,  # 将当前数字 d 加入位掩码。is_limit and d == up,  # 如果 d 达到上限,更新 is_limit。True  # 现在已经形成了一个有效数字。)return res# 从第一位开始 DFS,位掩码为空,限制条件由 n 决定,尚未形成数字。return dfs(0, 0, True, False)

代码

'''
Author: NEFU AB-IN
Date: 2024-08-10 20:54:06
FilePath: \LeetCode\2376\2376.py
LastEditTime: 2024-08-12 23:45:19
'''
import random
# 3.8.19 import
from ast import Pass
from collections import Counter, defaultdict, deque
from datetime import datetime, timedelta
from functools import lru_cache, reduce
from heapq import heapify, heappop, heappush, nlargest, nsmallest
from itertools import combinations, compress, permutations, starmap, tee
from math import ceil, comb, fabs, floor, gcd, hypot, log, perm, sqrt
from string import ascii_lowercase, ascii_uppercase
from sys import exit, setrecursionlimit, stdin
from typing import Any, Callable, Dict, List, Optional, Tuple, TypeVar, Union# Constants
TYPE = TypeVar('TYPE')
N = int(2e5 + 10)
M = int(20)
INF = int(1e12)
OFFSET = int(100)
MOD = int(1e9 + 7)# Set recursion limit
setrecursionlimit(int(2e9))class Arr:array = staticmethod(lambda x=0, size=N: [x() if callable(x) else x for _ in range(size)])array2d = staticmethod(lambda x=0, rows=N, cols=M: [Arr.array(x, cols) for _ in range(rows)])graph = staticmethod(lambda size=N: [[] for _ in range(size)])class Math:max = staticmethod(lambda a, b: a if a > b else b)min = staticmethod(lambda a, b: a if a < b else b)class IO:input = staticmethod(lambda: stdin.readline().rstrip("\r\n"))read = staticmethod(lambda: map(int, IO.input().split()))read_list = staticmethod(lambda: list(IO.read()))class Std:pass# ————————————————————— Division line ——————————————————————class Solution:def countSpecialNumbers(self, n: int) -> int:s = str(n)@lru_cache(None)def dfs(i, mask, is_limit, is_num):if i == len(s):return int(is_num)res = 0if not is_num:res = dfs(i + 1, mask, False, False)up = int(s[i]) if is_limit else 9down = 0 if is_num else 1for d in range(down, up + 1):if not 1 << d & mask:res += dfs(i + 1, mask | 1 << d, is_limit and d == up, True)return resreturn dfs(0, 0, True, False)

相关文章:

2376. 统计特殊整数

Powered by:NEFU AB-IN Link 文章目录 2376. 统计特殊整数题意思路代码 2376. 统计特殊整数 题意 如果一个正整数每一个数位都是 互不相同 的&#xff0c;我们称它是 特殊整数 。 给你一个 正 整数 n &#xff0c;请你返回区间 [1, n] 之间特殊整数的数目。 思路 详见灵神…...

Python 绘图进阶之核密度估计图:掌握数据分布的秘密

Python 绘图进阶之核密度估计图&#xff1a;掌握数据分布的秘密 引言 在数据分析中&#xff0c;了解数据的分布情况是至关重要的一步。除了常用的直方图和箱线图&#xff0c;核密度估计图&#xff08;Kernel Density Estimation, KDE&#xff09;提供了一种更为平滑、直观的方…...

设计模式(1)创建型模式和结构型模式

1、目标 本文的主要目标是学习创建型模式和结构型模式&#xff0c;并分别代码实现每种设计模式 2、创建型模式 2.1 单例模式&#xff08;singleton&#xff09; 单例模式是创建一个对象保证只有这个类的唯一实例&#xff0c;单例模式分为饿汉式和懒汉式&#xff0c;饿汉式是…...

RuoYi-Vue新建模块

一、环境准备 附:RuoYi-Vue下载与运行 二、新建模块 在RuoYi-Vue下新建模块ruoyi-test。 三、父pom文件添加子模块 在RuoYi-Vue的pom.xml中,引入子模块。 <dependency><groupId>com.ruoyi</groupId><artifactId>ruoyi-test</artifactId>&…...

Element-UI自学实践

概述 Element-UI 是由饿了么前端团队推出的一款基于 Vue.js 2.0 的桌面端 UI 组件库。它为开发者提供了一套完整、易用、美观的组件解决方案&#xff0c;极大地提升了前端开发的效率和质量。本文为自学实践记录&#xff0c;详细内容见 &#x1f4da; ElementUI官网 1. 基础组…...

ChatGPT如何工作:创作一首诗的过程

疑问 怎样理解 Chat GPT 的工作原理&#xff1f;比如我让他作一首诗&#xff0c;他是如何创作的呢&#xff1f;每一行诗&#xff0c;每一个字都是怎么来的&#xff1f;随机拼凑的还是从哪里借鉴的&#xff1f; 回答 当你让 ChatGPT 创作一首诗时&#xff0c;它并不是简单地随…...

Linux_Shell变量及运算符-05

一、Shell基础 1.1 什么是shell Shell脚本语言是实现Linux/UNIX系统管理及自W动化运维所必备的重要工具&#xff0c; Linux/UNIX系统的底层及基础应用软件的核心大都涉及Shell脚本的内容。Shell是一种编程语言, 它像其它编程语言如: C, Java, Python等一样也有变量/函数/运算…...

OpenCV图像滤波(13)均值迁移滤波函数pyrMeanShiftFiltering()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 函数执行均值迁移图像分割的初始步骤。 该函数实现了均值迁移分割的过滤阶段&#xff0c;即输出是经过滤波的“海报化”图像&#xff0c;其中颜色…...

用爬虫技术探索石墨文档:数据自动化处理与个性化应用的创新实践

用爬虫技术探索石墨文档&#xff1a;数据自动化处理与个性化应用的创新实践 在当今这个信息爆炸的时代&#xff0c;文档管理与协作成为了企业运营和个人工作中不可或缺的一部分。石墨文档&#xff0c;作为一款轻量级的云端Office套件&#xff0c;凭借其强大的在线协作、实时同…...

【JavaEE初阶】线程池

目录 &#x1f4d5; 引言 &#x1f333; 概念 &#x1f340;ThreadPoolExecutor 类 &#x1f6a9; int corePoolSize与int maximumPoolSize&#xff1a; &#x1f6a9; long keepAliveTime与TimeUnit nuit&#xff1a; &#x1f6a9; BlockingQueue workQueue&#xff1a…...

zdpgo_cobra_req 新增解析请求体内容

zdpgo_cobra_req 使用Go语言开发的&#xff0c;类似于curl的HTTP客户端请求工具&#xff0c;用于便捷的测试各种HTTP地址 特性 1、帮助文档都是中文的2、支持常见的HTTP请求&#xff0c;比如GET、POST、PUT、DELETE等 下载 git clone https://github.com/zhangdapeng520/z…...

Java聚合快递对接云洋系统快递小程序源码

&#x1f31f;【一键聚合&#xff0c;高效便捷】快递对接云洋系统小程序全攻略&#x1f680; 引言&#xff1a;告别繁琐&#xff0c;拥抱智能快递新时代&#x1f50d; 在这个快节奏的时代&#xff0c;每一分每一秒都弥足珍贵。你是否还在为手动输入多个快递单号、频繁切换不同…...

陕西西安培华学院计算机软件工程毕业设计课题选题参考目录​

陕西西安培华学院计算机软件工程毕业设计课题选题 博主介绍&#xff1a;✌️大厂码农|毕设布道师&#xff0c;阿里云开发社区乘风者计划专家博主&#xff0c;CSDN平台&#xff0c;✌️Java领域优质创作者,博客之星、掘金/华为云/阿里云等平台优质作者、专注于大学生项目实战开发…...

如何用sql在1分钟从1T数据中精准定位查询?Hive离线数仓 Spark分析

最近在一个群里&#xff0c;从群友哪里了解到这样一个业务需求&#xff1a;如何在 hdfs 1 T源数据库中&#xff0c;1分钟内从其中抓取自己想要的数据&#xff1f; 我的理解是 &#xff1a; 在hdfs数据库中为拥有 尽1T数据的表创建索引,并对其进行性能优化&#xff0c;以实现…...

acpi 主板布局需要 efi

今天在折腾 ESXI 的时候&#xff0c;启动虚拟机跳出了 acpi 主板布局需要 efi 然后我就将 ESXI 的启动方式改为了 EFI 但是虚拟机有莫名的启动不了&#xff0c;网上也没有找到办法&#xff0c;最后&#xff0c;我将虚拟机类型有原本的 ubuntu 换成了 debian 最后启动成功&…...

月之暗面对谈 Zilliz:长文本和 RAG 如何选择?

01 长文本与RAG通用对比 准确率&#xff1a;通常情况下长文本优于RAG 长文本&#xff1a;可更加综合的去分析所有相关的内容&#xff0c;提取相关数字&#xff0c;生成图表&#xff0c;效果尚可。RAG&#xff1a;更适合找到一段或者是几段可能相关的段落。如果希望大模型能够…...

高级java每日一道面试题-2024年8月12日-设计模式篇-请列举出在JDK中几个常用的设计模式?

如果有遗漏,评论区告诉我进行补充 面试官: 请列举出在JDK中几个常用的设计模式? 我回答: 在Java Development Kit (JDK) 中&#xff0c;许多设计模式被广泛使用&#xff0c;以帮助实现软件的结构、行为和复用。下面是一些在JDK中常见的设计模式及其简要说明&#xff1a; 工…...

mysql workbench8.0如何导出mysql5.7格式的sql定义

碰到的问题 mac上安装mysql workbech6.0后不能运行&#xff0c;但安装workbench8.0后&#xff0c;导出的数据库sql文件默认是msyql 8.0的语法和格式。比如生成索引的语句后面会有visible关键字&#xff0c;当把mysql8.0的sql文件导入到mysql5.7时就会报错。 如何解决 点击my…...

数据结构(学习)2024.8.6(顺序表)

今天开始学习数据结构的相关知识&#xff0c;大概分为了解数据结构、算法&#xff1b;学习线性表&#xff1a;顺序表、链表、栈、队列的相关知识和树&#xff1a;二叉树、遍历、创建&#xff0c;查询方法、排序方式等。 目录 一、数据结构 数据 逻辑结构 1.线性结构 2.树…...

MyBatis全解

目录 一&#xff0c; MyBatis 概述 1.1-介绍 MyBatis 的历史和发展 1.2-MyBatis 的特点和优势 1.3-MyBatis 与 JDBC 的对比 1.4-MyBatis 与其他 ORM 框架的对比 二&#xff0c; 快速入门 2.1-环境搭建 2.2-第一个 MyBatis 应用程序 2.3-配置文件详解 (mybatis-config.…...

Xshell远程连接Kali(默认 | 私钥)Note版

前言:xshell远程连接&#xff0c;私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)

文章目录 1.什么是Redis&#xff1f;2.为什么要使用redis作为mysql的缓存&#xff1f;3.什么是缓存雪崩、缓存穿透、缓存击穿&#xff1f;3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...

Nuxt.js 中的路由配置详解

Nuxt.js 通过其内置的路由系统简化了应用的路由配置&#xff0c;使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

Axios请求超时重发机制

Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式&#xff1a; 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...

ios苹果系统,js 滑动屏幕、锚定无效

现象&#xff1a;window.addEventListener监听touch无效&#xff0c;划不动屏幕&#xff0c;但是代码逻辑都有执行到。 scrollIntoView也无效。 原因&#xff1a;这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作&#xff0c;从而会影响…...

MySQL 部分重点知识篇

一、数据库对象 1. 主键 定义 &#xff1a;主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 &#xff1a;确保数据的完整性&#xff0c;便于数据的查询和管理。 示例 &#xff1a;在学生信息表中&#xff0c;学号可以作为主键&#xff…...

python爬虫——气象数据爬取

一、导入库与全局配置 python 运行 import json import datetime import time import requests from sqlalchemy import create_engine import csv import pandas as pd作用&#xff1a; 引入数据解析、网络请求、时间处理、数据库操作等所需库。requests&#xff1a;发送 …...

TCP/IP 网络编程 | 服务端 客户端的封装

设计模式 文章目录 设计模式一、socket.h 接口&#xff08;interface&#xff09;二、socket.cpp 实现&#xff08;implementation&#xff09;三、server.cpp 使用封装&#xff08;main 函数&#xff09;四、client.cpp 使用封装&#xff08;main 函数&#xff09;五、退出方法…...

电脑桌面太单调,用Python写一个桌面小宠物应用。

下面是一个使用Python创建的简单桌面小宠物应用。这个小宠物会在桌面上游荡&#xff0c;可以响应鼠标点击&#xff0c;并且有简单的动画效果。 import tkinter as tk import random import time from PIL import Image, ImageTk import os import sysclass DesktopPet:def __i…...

python读取SQLite表个并生成pdf文件

代码用于创建含50列的SQLite数据库并插入500行随机浮点数据&#xff0c;随后读取数据&#xff0c;通过ReportLab生成横向PDF表格&#xff0c;包含格式化&#xff08;两位小数&#xff09;及表头、网格线等美观样式。 # 导入所需库 import sqlite3 # 用于操作…...