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

算法通关村——数字中的统计、溢出、进制转换处理模板

数字与数学基础问题

1、数字统计

1.1、符号统计

LeetCode1822. 给定一个数组,求所有元素的乘积的符号,如果最终答案是负的返回-1,如果最终答案是正的返回1,如果答案是0返回0.

这题其实只用看数组中0和负数的个数就好了,数组中有0的话,最后的结果肯定是0,数组中负数的个数是奇数的话,最终结果就是负的,偶数个的话结果就是正的。代码如下:

public int arraySign(int[] nums) {int prod = 1;for (int i = 0; i < nums.length; i++) {if (nums[i] == 0) {return 0;} else if (nums[i] < 0) {//直接交替就好了,很好的处理技巧prod = -prod;}}return prod;
}

1.2、阶乘结果中末尾0的个数

设计一个算法,算出n阶乘后有多少个尾随0。

这题如果硬算的话肯定会花费很多时间,我们可以换个角度思考,如果一个数的末尾有0,肯定是乘过10的,而10是由 2 * 5得来的,所以只用统计2和5一起出现多少对,不过因为2出现的次数一定大于5出现的次数,因此我们只需要统计5出现的次数就好了。在统计的过程中,我们只需要统计5、10、15、…… 5 n 5^n 5n这样5的整数倍就好了,最后累加起来,就是多少个0。代码如下:

public int trailingZeroes(int n) {int cnt = 0;for (long num = 5; n / num > 0; num *= 5) {cnt += n / num;}return cnt;
}

这里num * 5 是因为 n / num 首先计算的是从1到n数中包含1个5的个数,比如1 * 5 = 5,2 * 5 = 10,然后计算的是包含2个5的个数,比如5 * 5 = 25,5 * 5 * 2 = 50,以此类推,加起来就是最终结果中含5的个数。

2、溢出问题

2.1、整数反转

LeetCode7. 给你一个32位的有符号整数x,返回将x中的数字部分反转后的结果。如果反转后整数超过32位的有符号整数的范围[-2^31 , 2^31 - 1],就返回0.假设环境不允许存储64位整数(有符号或无符号)。

这题需要考虑溢出的问题,比如1147483649这个数字,它是小于最大的32位整数2147483647的,但是将这个数字反转过来后就变成了9463847411,这就比最大的32位整数还要大了,这样的数字是没法存到int中的,所以就溢出了。

取得一个数中的各个位上的数字很简单,循环取模即可,例如取得12345的各个数位上的数字,首先将12345 % 10 = 5,就得到个位数上的数字5,然后将12345 / 10 = 1234,这样再继续模10就好了,如下图所示:

image-20231119215422255

这是正数的情况,如果再考虑负数的话,可以将循环设置为while(x != 0)。因为无论是正数还是负数,按照上面不断的/10操作,最后都会变为0,所以判断终止条件就是 != 0。

再就是怎么去处理溢出的问题,我们需要从倒数第二位开始判断是否溢出,因为如果直接比较最终的结果的话,像上面所讲到的,一旦数溢出的话int是存不下的,所以得提前判断。而32位最大整数MAX=2147483647,它的倒数第二位是4,所以就要分析结果的倒数第二位和4的大小关系,如下所示:

image-20231119220454350

  • 如果res > 214748364,那最后一位要接上的数就不用看了,肯定溢出了
  • 如果res = 214748364,就需要跟最大数的最后一个数字相比,如果比7大,那就说明溢出了
  • 如果res < 214748364,继续处理即可,不会溢出

对于负数同理,代码如下:

public int reverse(int x) {int res = 0;while(x != 0) {//获得末尾数字int temp = x % 10;//判断是否大于最大的32位整数if (res > Integer.MAX / 10 || (res == Integer.MAX / 10 && temp > 7)) {return 0;}//判断是否小于最小的32位整数if (res < Integer.MIN / 10 || (res == Integer.MIN / 10 && temp < -8)) {return 0;}res = res * 10 + temp;x /= 10;}return res;
}

3、进制专题

3.1、进制转换

给定一个十进制数M,以及需要转换的进制数N,将十进制数M转化位N进制数。M是32位整数,2<=N<=16.

对于这个问题,需要处理以下的几个点:

  • 超过进制最大范围后需要映射到其他进制,比如用ABCDEF去表示数
  • 需要对结果进行转置
  • 需要判断符号

用以下三个措施可以比较方便的去处理这个问题:

  • 定义大小位16的数组F,保存的是2到16的各个进制的值对应的标记,这样赋值时只计算下标,不必考虑不同进制的转换关系
  • 使用StringBuffer完成数组转置等功能
  • 通过一个flag来判断正数还是负数
//要考虑到余数>9的情况,2 <= N <= 16
public static final String[] F = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F"};//将十进制数M转化位N进制数
public String convert(int M, int N) {if (M < 0) {flag = true;M * -1;}StringBuffer sb = new StringBuffer();int temp;while(M != 0){temp = M % N;sb.append(F[temp]);M = M / N;}sb.reverse();return (flag ? "-" : "") + sb.toString();
}

相关文章:

算法通关村——数字中的统计、溢出、进制转换处理模板

数字与数学基础问题 1、数字统计 1.1、符号统计 LeetCode1822. 给定一个数组&#xff0c;求所有元素的乘积的符号&#xff0c;如果最终答案是负的返回-1&#xff0c;如果最终答案是正的返回1&#xff0c;如果答案是0返回0. 这题其实只用看数组中0和负数的个数就好了&#x…...

ESP01S通过心知天气获取天气和时间信息

ESP01S通过心知天气获取天气和时间信息 设置STA模式 ATCWMODE1 连接wifi ATCWJAP"wifi名称","wifi密码"3.设置时间地域 ATCIPSNTPCFG1,8获取时间 ATCIPSNTPTIME?返回&#xff1a; CIPSNTPTIME:Fri Nov 17 17:09:22 2023 OK连接心知服务器 ATCIPSTAR…...

docker容器内core dumped却找不到core文件

1. 检查ulimit&#xff0c; 使用命令&#xff1a; ulimit -a rootb7c19f6da1e3:/usr# ulimit -a core file size (blocks, -c) unlimited data seg size (kbytes, -d) unlimited scheduling priority (-e) 0 file size (blocks…...

ubuntu提高 github下载速度

Github一般用于Git的远程仓库&#xff0c;由于服务器位于国外&#xff0c;国内访问速度比较慢&#xff0c;为了提高访问速度&#xff0c;决定绕过DNS域名解析。 获取Github的IP地址 按下ctrl&#xff0b;alt&#xff0b;T打开命令终端&#xff0c;输入&#xff1a; nslookup gi…...

Node.js之path路径模块

让我为大家介绍一下path路径模块吧&#xff01; 什么是path路径模块&#xff1f; path 模块是 Node.s 官方提供的、用来处理路径的模块。它提供了一系列的方法和属性&#xff0c;用来满足用户对路径的处理需求。 介绍三个关于path模块的方法&#xff1a; path.join() 方法&…...

TCP与UDP协议

TCP与UDP协议 1、TCP协议&#xff1a; 1、TCP特性&#xff1a; TCP 提供一种面向连接的、可靠的字节流服务。在一个 TCP 连接中&#xff0c;仅有两方进行彼此通信。广播和多播不能用于 TCP。TCP 使用校验和&#xff0c;确认和重传机制来保证可靠传输。TCP 给数据分节进行排序…...

“ /^A-Z:\\{1,2}^/:\*\?<>\|+\.(jpg|gif|png|bmp)$/i ”这个正则表达式的理解

这个正则表达式可以分解为以下几个部分&#xff1a; ^&#xff1a;这是一个开始符号&#xff0c;表示匹配必须从字符串的开始部分开始。/&#xff1a;这是一个斜杠符号&#xff0c;通常在正则表达式中用来表示特殊字符的转义。A-Z:&#xff1a;这部分表示匹配一个大写字母后跟…...

批量下载Sentinel数据脚本2023

批量下载Sentinel数据脚本2023 那些最好的程序员不是为了得到更高的薪水或者得到公众的仰慕而编程&#xff0c;他们只是觉得这是一件有趣的事情&#xff01; 批量下载Sentinel数据脚本2023 批量下载Sentinel数据脚本2023&#x1f33f;前言&#x1f33f;脚本地址&#x1f4e7;Su…...

lv11 嵌入式开发 ARM指令集中(伪操作与混合编程) 7

目录 1 伪指令 2 伪操作 3 C和汇编的混合编程 4 ATPCS协议 1 伪指令 本身不是指令&#xff0c;编译器可以将其替换成若干条等效指令 空指令NOP 指令LDR R1, [R2] 将R2指向的内存空间中的数据读取到R1寄存器 伪指令LDR R1, 0x12345678 R1 0x12345678 LDR伪指令可以将任…...

北邮22级信通院数电:Verilog-FPGA(10)第十周实验 实现移位寄存器74LS595

北邮22信通一枚~ 跟随课程进度更新北邮信通院数字系统设计的笔记、代码和文章 持续关注作者 迎接数电实验学习~ 获取更多文章&#xff0c;请访问专栏&#xff1a; 北邮22级信通院数电实验_青山如墨雨如画的博客-CSDN博客 目录 一.代码部分 二.管脚分配 三.实现过程讲解及效…...

麒麟系统安装找不到安装源!!!!设置基础软件仓库时出错

记录--华为RH2288 V3服务器安装麒麟系统遇到的问题 1.遇到的问题--“设置基础软件仓库时出错”报错导致无法继续安装 没办法下一步 先说结论&#xff1a;系统bug 该问题在CentOS、Rocky Linux最新版中均存在 解决&#xff1a; &#xff08;一&#xff09;、如果是外网直接配…...

代码随想录算法训练营第三十九天【动态规划part02】 | 62.不同路径、63. 不同路径 II

62.不同路径 题目链接&#xff1a; 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 求解思路&#xff1a; 动规五部曲 确定dp数组及其下标含义&#xff1a;dp[i][j] 表示从&#xff08;0,0&#xff09;出发&#xff0c;到&#xff08;i,j&#x…...

鸿蒙4.0开发笔记之DevEco Studio如何使用Previewer窗口预览器(一)

一、预览器作用 DevEco Studio预览器概况在HarmonyOS应用开发过程中&#xff0c;通过使用预览器&#xff0c;可以查看应用的UI效果&#xff0c;方便开发者实时查看应用的运行效果&#xff0c;随时调整代码。 二、打开Previewer预览器 1、正常启动 打开预览器的位置在DevEco…...

音视频转换软件Permute mac中文板特点介绍

Permute mac是一款Mac平台上的媒体格式转换软件&#xff0c;由Chaotic Software开发。它可以帮助用户快速地将各种音频、视频和图像文件转换成所需格式&#xff0c;并提供了一些常用工具以便于用户进行编辑和处理。 Permute mac软件特点 - 支持大量格式&#xff1a;支持几乎所…...

前端uniapp列表下拉到底部加载下一页列表【下拉加载页面/带源码/实战】

目录 一. 图片1.2. 二.list.vue三.uni-load-more.vue最后 一. 图片 1. 2. 二.list.vue <template><view><!--列表--><scroll-view scroll-y"true" class"scroll-Y" :style"height: scrollviewHigh px;" lower-threshol…...

超聚变服务器关闭超线程CPU的步骤(完整版)

前言: 笨鸟先飞&#xff0c;好记性不如烂笔头。 我们项目都用不到超线程CPU&#xff0c;所以调测设备的时候都需要关掉&#xff0c;最近新设备换成了超聚变的服务器&#xff0c;这篇记录我关闭&#xff08;超聚变&#xff09;服务器超线程CPU的方法步骤。 关闭超线程CPU的步骤…...

智能驾驶汽车虚拟仿真视频数据理解(一)

赛题官网 datawhale 赛题介绍 跑通demo paddle 跑通demo torch 提交的障碍物取最主要的那个&#xff1f;不考虑多物体提交。障碍物&#xff0c;尽可能选择状态发生变化的物体。如果没有明显变化的&#xff0c;则考虑周边的物体。车的状态最后趋于减速、停止&#xff0c;时序…...

事关Django的静态资源目录设置(Django的setting.py中的三句静态资源(static)目录设置语句分别是什么作用?)

在Django的setting.py中常见的三句静态资源(static)目录设置语句如下&#xff1a; STATICFILES_DIRS [os.path.join(BASE_DIR, static)] STATIC_ROOT os.path.join(BASE_DIR, static) STATIC_URL /static/下面介绍这三句话的作用。 首先说第1句和第2句&#xff1a; STATI…...

Vue.js2+Cesium1.103.0 十四、绘制视锥,并可实时调整视锥姿态

Vue.js2Cesium1.103.0 十四、绘制视锥&#xff0c;并可实时调整视锥姿态 Demo <template><divid"cesium-container"style"width: 100%; height: 100%;"><divclass"control"style"position: absolute;right: 50px;top: 50px…...

批量替换WordPress文章内图片链接

在WordPress使用过程中&#xff0c;如果中途更换了域名&#xff0c;原先文章内的图片使用的是原来的域名&#xff0c;就会造成文章页里面的图片链接无法显示。如果从后台文章挨个修改就比较麻烦。可以通过数据库进行批量替换即可。 使用 PHPMyadmin 打开 数据库&#xff0c;登…...

30+平台文档一键免费下载:浏览器文档下载工具的终极解决方案

30平台文档一键免费下载&#xff1a;浏览器文档下载工具的终极解决方案 【免费下载链接】kill-doc 看到经常有小伙伴们需要下载一些免费文档&#xff0c;但是相关网站浏览体验不好各种广告&#xff0c;各种登录验证&#xff0c;需要很多步骤才能下载文档&#xff0c;该脚本就是…...

【审计专栏】【财务领域】第二十八篇 全球/中国货币流动中离钱最近的岗位01

全球/中国货币流动和流入/流出最近的距离相关信息,特别关注“离钱最近的岗位”,按照指定表格格式输出如下: 编号 类型 国家 省/市/区县 行业 公司类型 岗位类型【含管理岗/基层岗位】 离货币收入/投放的距离指标和偏差指数和期望/方差 指标类型 模型逐步推理思考的…...

企业级多模型聚合平台选型,如何通过用量看板实现成本精细化管理

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 企业级多模型聚合平台选型&#xff0c;如何通过用量看板实现成本精细化管理 当企业技术团队决定将大模型能力深度融入业务流程时&a…...

轻量神经网络在量子比特实时控制中的嵌入式部署实践

1. 项目概述&#xff1a;当机器学习遇见量子控制在量子计算这个前沿领域&#xff0c;我们每天都在与微观世界的“幽灵”打交道。一个量子比特的状态&#xff0c;就像地球仪上的一个点&#xff0c;可以用布洛赫球面上的经度和纬度来描述。要让这个点精确地旋转到我们指定的位置&…...

Python爬虫绕过JA3/JA4指纹检测的TLS定制实战

1. 这不是“绕过检测”&#xff0c;而是理解TLS握手的底层语言你写好了一个Python爬虫&#xff0c;目标网站明明没上WAF、也没用Cloudflare&#xff0c;但一发请求就返回403——连HTML正文都没有&#xff0c;只有个空响应体。抓包一看&#xff0c;服务器在TCP三次握手之后、TLS…...

跟着 MDN 学CSS day_14:(尺寸调整技能测试与实战解析)

在掌握了 CSS 元素尺寸调整的理论知识之后&#xff0c;实际动手练习是检验理解程度的最佳方式。MDN 的"Test your skills: Sizing"这一节提供了三个精心设计的任务&#xff0c;分别覆盖了最小高度与固定高度的区别、百分比宽度与内边距在 border-box 模型下的计算、以…...

跟着 MDN 学CSS day_12 :(值与单位的技能测试与深入理解)

在学习 CSS 的过程中&#xff0c;值与单位是决定样式精确性和灵活性的关键知识。颜色值怎么写、字体大小用 px 还是 em、背景图怎么定位&#xff0c;这些看似基础的问题&#xff0c;实际上直接影响到页面的可维护性、响应式表现和视觉效果。MDN 的"Test your skills: Valu…...

抖音下载神器:3分钟掌握无水印批量下载技巧,效率提升90%

抖音下载神器&#xff1a;3分钟掌握无水印批量下载技巧&#xff0c;效率提升90% 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser f…...

【算法分析与设计】第4篇:分治策略的理论框架与经典案例

在计算机科学中&#xff0c;很少有比“分而治之”更自然的解题思路了。面对一个庞杂的问题&#xff0c;先把它切成几个小块&#xff0c;逐个击破&#xff0c;再拼回整体——这种朴素的分割策略&#xff0c;经过严谨的形式化之后&#xff0c;便成了我们所说的分治范式。一个标准…...

如何彻底解锁你的加密音乐:终极免费浏览器解决方案

如何彻底解锁你的加密音乐&#xff1a;终极免费浏览器解决方案 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库&#xff1a; 1. https://github.com/unlock-music/unlock-music &#xff1b;2. https://git.unlock-music.dev/um/web 项目地址: https://…...