豆包MarsCode:小C的类二进制拼图

问题描述

在这里插入图片描述


思路分析

1. 类二进制数字定义

从题目中我们可以知道,类二进制数字是仅由 0 和 1 组成的数字。比如:1, 10, 100, 101, 110 等等,这些数字都是合法的类二进制数字。换句话说,类二进制数字可以看作是 “二进制表示法” 对应的十进制数。

2. 问题关键点

  • 数字的分解:给定一个数字 n,我们需要用最少的类二进制数字相加得到它。分解问题关键在于如何通过最小的类二进制数字组合来得到 n
  • 观察到,n 的十进制数可以看作是由多个 类二进制数字 组合而成。

3. 解题思路

  • 假设数字 n 为一个十进制数。我们可以把 n 看作是由若干个类二进制数字加起来构成。
  • 例如,对于 212,我们可以拆分为 111101,因为:
    111 + 101 = 212
    
    对于 9876543210,我们可以拆分成每个位置上的数字,每一位都代表一个类二进制数字。由于每个位置上的数字最大是 9,我们需要最多 9 个类二进制数字。

4. 解题策略

为了计算最少需要多少个类二进制数字:

  • 我们可以遍历数字 n,逐位查看每一位上的数字。
  • 关键:对于每一位上的数字 d,如果它是非零的,我们就需要 d 个类二进制数字来处理这一位。

5. 举例分析

例如,对于数字 212

  • 第一个数字是 2,我们需要至少 2 个类二进制数字来填补这个数字。
  • 第二个数字是 1,我们需要 1 个类二进制数字来填补这一位。
  • 第三个数字是 2,我们再次需要 2 个类二进制数字来填补。

因此,最少需要 2 个类二进制数字,答案是 2

对于 9876543210

  • 每一位的数字都需要拆分开来,因此最少需要 9 个类二进制数字。

复杂度分析:

  • 时间复杂度O(k),其中 k 是数字 n 的长度。我们需要遍历字符串中的每一位,找出最大数字。
  • 空间复杂度O(1),只使用了常量空间来存储最大值。

参考代码(Java)

public class Main {public static int solution(String n) {// 记录数字 n 中的最大位int maxDigit = 0;// 遍历 n 的每一位,更新 maxDigitfor (int i = 0; i < n.length(); i++) {maxDigit = Math.max(maxDigit, n.charAt(i) - '0');}// 返回最大位数值作为最少类二进制数字个数return maxDigit;}public static void main(String[] args) {System.out.println(solution("10101") == 1); System.out.println(solution("212") == 2); System.out.println(solution("1000000") == 1); System.out.println(solution("123456789") == 9); System.out.println(solution("9876543210") == 9); }
}

代码分析

solution 方法:

这个方法的主要功能是计算最少需要多少个类二进制数字来表示给定的数字 n

public static int solution(String n) {int maxDigit = 0;for (int i = 0; i < n.length(); i++) {maxDigit = Math.max(maxDigit, n.charAt(i) - '0');}return maxDigit;
}

分析:

  • int maxDigit = 0;

    • 这里定义了一个变量 maxDigit,用来存储数字 n 中最大的一位数字。我们将用它来决定最少需要多少个类二进制数字。
  • for (int i = 0; i < n.length(); i++) {

    • 遍历字符串 n 的每一位。n.length() 返回字符串 n 的长度。i 是遍历索引,确保每一位都会被检查。
  • maxDigit = Math.max(maxDigit, n.charAt(i) - '0');

    • n.charAt(i) 取出字符串 n 中第 i 位的字符。
    • 由于 n.charAt(i) 是字符类型,需要将其转换为数字。n.charAt(i) - '0' 就是将字符转换为对应的数字(例如字符 '2' 会被转换为数字 2)。
    • Math.max(maxDigit, n.charAt(i) - '0') 的作用是更新 maxDigit,使其始终保持 n 中最大的数字。
  • return maxDigit;

    • 返回 maxDigit,即 n 中最大的一位数字。根据我们之前的推理,n 最少需要 maxDigit 个类二进制数字来表示。

主要逻辑:

  • 最少类二进制数字个数 = n 中的最大数字。
    • 这是因为每个数字表示的值决定了我们至少需要多少个类二进制数字。例如:
      • 如果 n 中最大数字是 5,那么至少需要 5 个类二进制数字(每个类二进制数字的最大值为 1,如 1, 10, 100, 1000, 10000)。
      • 如果最大数字是 9,则需要至少 9 个类二进制数字。

总结:

  • 时间复杂度O(k),其中 k 是数字 n 的长度。我们只需要遍历一次 n
  • 空间复杂度O(1),只使用常量的额外空间(除了输入字符串)。

补充

为什么最大位数字决定了我们所需的类二进制数字个数?

假设给定一个数字 n,它的各个数字可以通过多个类二进制数字加起来得到。我们观察到,如果数字 n 中某一位上的数字最大是 9(比如 9876543210),那么我们至少需要 9 个类二进制数字。

例子说明

考虑数字 n = 212

212 -> 111 + 101

这表示 212 可以由两个类二进制数字组成:111101。这样我们就用最少的两个类二进制数字表示了 212

我们继续来分析更大的数字。例如,考虑 9876543210,它的每一位数字分别是:

9876543210 -> 9999999999 需要至少 9 个类二进制数字

这里的最大数字是 9,所以我们需要至少 9 个类二进制数字来组成这个数字。更直观地理解:

  • 每个类二进制数字代表一种由 10 组成的组合(例如 1, 10, 100 等等),而每一位数字的值决定了我们需要几个这样的类二进制数字来填补对应的数字。

具体推理:

  • 每个类二进制数字只能包含 10,比如 1, 10, 100, 111
  • 如果某一位的数字为 n,这意味着我们至少需要 n 个类二进制数字来填充这个位置的数字。例如:
    • 如果某位为 5,我们至少需要 5 个类二进制数字才能表达这 5(例如 11111)。
    • 如果某位为 9,我们至少需要 9 个类二进制数字来表示(例如 111111111)。

因此,数字 n 中的 最大位值 决定了我们需要多少个类二进制数字。换句话说,最大数字 就是我们构建数字 n 时所需的最少类二进制数字个数。

总结

由于每一位的数字决定了我们在构造数字时所需的类二进制数字的个数,且最大数字代表了最大的需求(即最多需要多少个类二进制数字),因此 数字 n 的最大位数字 就是我们最少需要的类二进制数字个数。(如: 5=1+1+1+1+1

举例

  1. 对于 212
    • 最大数字是 2,所以需要 2 个类二进制数字。(2=1+1)
  2. 对于 123456789
    • 最大数字是 9,所以需要 9 个类二进制数字。(9=1+1+1+1+1+1+1+1+1)
  3. 对于 1000000
    • 最大数字是 1,所以只需要 1 个类二进制数字。(1=1)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/6361.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

中国综合算力指数(2024年)报告汇总PDF洞察(附原数据表)

原文链接&#xff1a; https://tecdat.cn/?p39061 在全球算力因数字化技术发展而竞争加剧&#xff0c;我国积极推进算力发展并将综合算力作为数字经济核心驱动力的背景下&#xff0c;该报告对我国综合算力进行研究。 中国算力大会发布的《中国综合算力指数&#xff08;2024年…

Vue中设置报错页面和“Uncaught runtime errors”弹窗关闭

文章目录 前言操作步骤大纲1.使用Vue自带的报错捕获机制添加报错信息2.在接口报错部分添加相同机制3.把报错信息添加到Vuex中方便全局使用4.添加报错页面备用5.app页面添加if判断替换报错界面 效果备注&#xff1a;vue项目中Uncaught runtime errors:怎样关闭 前言 在开发Vue项…

单调栈详解

文章目录 单调栈详解一、引言二、单调栈的基本原理1、单调栈的定义2、单调栈的维护 三、单调栈的应用场景四、使用示例1、求解下一个更大元素2、计算柱状图中的最大矩形面积 五、总结 单调栈详解 一、引言 单调栈是一种特殊的栈结构&#xff0c;它在栈的基础上增加了单调性约束…

算法题之栈与队列:理论基础与常用操作接口

栈与队列 &#xff08;1&#xff09;理论基础 栈&#xff1a;先进后出的数据结构 队列&#xff1a;先进先出的数据结构 栈提供push 和 pop 等等接口&#xff0c;所有元素必须符合先进后出规则&#xff0c;所以栈不提供走访功能&#xff0c;也不提供迭代器(iterator)。 不像是…

snippets router pinia axios mock

文章目录 补充VS Code 代码片段注册自定义组件vue routerpinia删除vite创建项目时默认的文件axiosmock3.0.x版本的 viteMockServe 补充 为文章做补充&#xff1a;https://blog.csdn.net/yavlgloss/article/details/140063387 VS Code 代码片段 为当前项目创建 Snippets {&quo…

llama-2-7b权重文件转hf格式及模型使用

目录 1. obtain llama weights 2. convert llama weights files into hf format 3. use llama2 to generate text 1. obtain llama weights &#xff08;1&#xff09;登录huggingface官网&#xff0c;搜索llama-2-7b &#xff08;2&#xff09;填写申请表单&#xff0c;VP…

图形化数据报文转换映射工具

目录 概要整体架构流程技术名词解释技术细节小结 概要 在当今数字化时代&#xff0c;数据的处理和分析是企业、科研机构以及各类组织日常运营的核心环节。数据来源广泛&#xff0c;格式多样&#xff0c;常见的数据格式包括XML&#xff08;可扩展标记语言&#xff09;和JSON&a…

计算机视觉算法实战——无人机检测

✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ ​ ​ 1. 引言✨✨ 随着无人机技术的快速发展&#xff0c;无人机在农业、物流、监控等领域的应用越来越广泛。然而&#xff0c;无人机的滥用也带…

我谈概率论与数理统计的知识体系

学习概率统计二十多年后&#xff0c;在廖老师的指导下&#xff0c;厘清了各章之间的关系。本来就是一条线两个分支&#xff0c;脉络很清晰。 分支一&#xff1a;从随机现象到样本空间到随机事件再到概率。 从随机事件到随机变量&#xff1a;为了进行定量的数学处理&#xff0…

docker ubuntu:20.04构建c++ grpc环境

由c grpc必须源码编译&#xff0c;ubuntu版本不同可能出现的问题也不同&#xff0c;这里分享下我的构建过程。 我是vscode结合docker去安装c虚拟环境&#xff0c;我不想污染本机环境。 vscode的插件Dev Containers Dockerfile如下(如果单纯是ubuntu环境构建&#xff0c;可忽略该…

使用KNN实现对鸢尾花数据集或者自定义数据集的的预测

创建自定义数据集&#xff1a; point1[[7.7,6.1],[3.1,5.9],[8.6,8.8],[9.5,7.3],[3.9,7.4],[5.0,5.3],[1.0,7.3]] point2[[0.2,2.2],[4.5,4.1],[0.5,1.1],[2.7,3.0],[4.7,0.2],[2.9,3.3],[7.3,7.9]] point3[[9.2,0.7],[9.2,2.1],[7.3,4.5],[8.9,2.9],[9.5,3.7],[7.7,3.7],[9.…

Go学习:常量

变量&#xff1a;程序运行期间&#xff0c;可以改变的量&#xff0c;变量声明需要使用 var 常量&#xff1a;程序运行期间&#xff0c;不可以改变的量&#xff0c;常量声明需要使用 const 目录 1. 常量不允许修改 2. 常量赋值不使用 : 3. 常量能够自动推导类型 1. 常量不允许…

钉钉群机器人设置——python版本

钉钉群机器人设置——python版本 应用场景钉钉界面操作程序开发效果展示 应用场景 由于工作需要&#xff0c;很多项目执行程序后出现报错信息无法第一时间收到&#xff0c;因此实时预警对于监控程序还是有必要。&#xff08;仅个人观点&#xff09; 参考文档及博客&#xff1a…

Effective Python系列(1.1):区别bytes和str

本篇文章是 Effective Python 这本书的第一章&#xff0c;本章的主要内容是什么样的代码风格才是比较符合 Python 语言。 在 Python 当中&#xff0c;bytes 和 str 是两种不同的数据结构。使用时&#xff0c;需要注意两者区别&#xff1a; bytes 包含的是由 8 位值所组成的序列…

vue + element-ui 组件样式缺失导致没有效果

失效 代码&#xff1a; 修改方法&#xff1a; 在main.js文件里面加上&#xff1a; import element-ui/lib/theme-chalk/index.css; 最后&#xff1a;

Formality:不可读(unread)的概念

相关阅读 Formalityhttps://blog.csdn.net/weixin_45791458/category_12841971.html?spm1001.2014.3001.5482https://blog.csdn.net/weixin_45791458/category_12841971.html?spm1001.2014.3001.5482 在Formality中有时会遇到不可读(unread)这个概念&#xff0c;本文就将对此…

机器学习 vs 深度学习

目录 一、机器学习 1、实现原理 2、实施方法 二、深度学习 1、与机器学习的联系与区别 2、神经网络的历史发展 3、神经网络的基本概念 一、机器学习 1、实现原理 训练&#xff08;归纳&#xff09;和预测&#xff08;演绎&#xff09; 归纳: 从具体案例中抽象一般规律…

OpenCV:高通滤波之索贝尔、沙尔和拉普拉斯

目录 简述 什么是高通滤波&#xff1f; 高通滤波的概念 应用场景 索贝尔算子 算子公式 实现代码 特点 沙尔算子 算子公式 实现代码 特点 拉普拉斯算子 算子公式 实现代码 特点 高通滤波器的对比与应用场景 相关阅读 OpenCV&#xff1a;图像滤波、卷积与卷积核…

豆包MarsCode 蛇年编程大作战 | 高效开发“蛇年运势预测系统”

&#x1f31f; 嗨&#xff0c;我是LucianaiB&#xff01; &#x1f30d; 总有人间一两风&#xff0c;填我十万八千梦。 &#x1f680; 路漫漫其修远兮&#xff0c;吾将上下而求索。 豆包MarsCode 蛇年编程大作战 | &#x1f40d; 蛇年运势预测 在线体验地址&#xff1a;蛇年…

开源鸿蒙开发者社区记录

lava鸿蒙社区可提问 Laval社区 开源鸿蒙项目 OpenHarmony 开源鸿蒙开发者论坛 OpenHarmony 开源鸿蒙开发者论坛