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

233. 数字 1 的个数

题目链接:233. 数字 1 的个数 - 力扣(LeetCode)

 

 

 

 

 

 

 

 

 

 

 

解析:

这道题我是用排列组合做的,可以看题目注释

    // 整体思想:// 1、从左到右,针对第k位数减一后,后边的n - k位子可以0~9排列组合// 2、先用总的排列组合 - 没有1的排列组合// 3、这总共n - k + 1位中,如果一个数有j个1,那么结果就需要多加 j - 1,因为排列组合只算了一个1// 所以需要把有多个1的情况算一下,范围一般是1 ~ n - k (如果这个第k位数减1后还大于等于1的话就是 n - k + 1)// 第k位处理完之后,接着定住第k位原来的数,然后处理k - 1位,依次到最后一位// “定住k位原来的数”这个操作要注意,如果原来是1,那么处理下面几位进行第2、3步时要加上这些1的个数class Solution {
public:int C(int a, int b) {int child = 1;for (int i = a; i > a - b; i--) {child *= i;}int father = 1;for (int i = b; i > 0; i--) {father *= i;}return child / father;}int get_extra_ones(const int& extra, const int& high, const int& pre_one_cnt) {int total = 0;// for (int j = 1; j <= extra; j++) {// 第一位不为1int has_one_cnt = C(extra, j) * pow(9, extra - j) * (high == 0 ? 1 : high);if (high > 0) {// 第一位为1has_one_cnt += C(extra, j - 1) * pow(9, extra - j + 1);}total += (j - 1 + pre_one_cnt) * has_one_cnt;}// 如果高位减一的数还大于等于1,全为1的情况,应该再加上这些if (high > 0)// 还需要加上前面几位有1的个数total += (extra + pre_one_cnt);return total;}int get_one_cnt(const string& str) {int n = str.size();int ret = 0;int pre_one_cnt = 0;for (int i = 0; i < n; i++) {if (str[i] == '0') {continue;}int high = str[i] - '0' - 1;int extra = n - i - 1;int total = pow(10, extra) * (high + 1);int no_one = pow(9, extra) * (high == 0 ? 1 : high);// 减没有1的排列组合时,要加上前面几位有1的个数total += no_one * (pre_one_cnt - 1);total += get_extra_ones(extra, high, pre_one_cnt);if (str[i] == '1') pre_one_cnt++;ret += total;}ret += pre_one_cnt;return ret;}int countDigitOne(int n) {string str = to_string(n);return get_one_cnt(str);}
};

 

http://www.jsqmd.com/news/69502/

相关文章:

  • Autel MaxiPRO MP808TS 1-Year Update Subscription: Keep Your Diagnostic Tool Updated Effective
  • 需求的变更控制
  • 在java中实现c#的int.TryParse方法
  • 基于微信小应用的茶叶茶具销售和管理系统(源码+论文+部署+安装)
  • 我的 OI 生涯(更新中)
  • 少儿编程哪家强?这几家机构不容错过! - 品牌测评鉴赏家
  • 【值得收藏】构建企业级智能体RAG系统:解决大模型五大痛点,让AI真正理解业务 - 教程
  • AI浪潮下的冷思考:技术、就业与我们的未来
  • 为AI时代蓄力:除了几大热门,还有哪些值得关注的少儿编程选择? - 品牌测评鉴赏家
  • 网络协议之传统DNS存在的问题以及httpdns - 详解
  • 孩子想学人工智能,有推荐的机构吗?2025 年权威测评与精选指南 - 品牌测评鉴赏家
  • [挑战成为CCPC传奇单挑王暨第二届CACC游记]一、我又回来了
  • 孩子AI梦起航:靠谱机构大揭秘 - 品牌测评鉴赏家
  • 2025年少儿编程机构选课指南:从口碑到实力的全方位测评 - 品牌测评鉴赏家
  • 2025年AI人工智能培训机构怎么选?这份避坑指南帮你锁定高性价比机构 - 品牌测评鉴赏家
  • 【树莓派】搭建树莓派的交叉编译环境
  • 信奥赛辅导机构深度解析:五家特色品牌助你精准选择 - 品牌测评鉴赏家
  • 需求获取
  • 20251209周二日记
  • 完整教程:主动交互和情境感知,AI 硬件是脱离手机屏幕掌控的蓝海机会丨硬件和端侧模型专场@RTE2025 回顾
  • 搞了3年云原生,我才发现“平台工程”的终点是开发者体验
  • 阅读笔记五:解耦与模块化
  • 少儿编程:培养未来小极客,这些好处和机构家长必须知道! - 品牌测评鉴赏家
  • 深入解析:PostgreSQL 向量扩展插件pgvector安装和使用
  • 2025年优质SAT辅导机构概览与选择指南 - 品牌测评鉴赏家
  • simplis电源仿真(一)
  • CF1407D 题解
  • #题解#洛谷P7167 喷泉#ST表#区间最值#
  • 2025 年 SAT 辅导机构怎么选?TOP1 无老师国际领衔,三大维度精准避坑 - 品牌测评鉴赏家
  • QT CMake项目中spdlog编译优化实战:从30秒到毫秒级的构建优化