《程序员面试金典(第6版)》面试题 16.05. 阶乘尾数

题目描述

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

示例 1:

  • 输入: 3
  • 输出: 0
  • 解释: 3! = 6, 尾数中没有零。

示例 2:

  • 输入: 5
  • 输出: 1
  • 解释: 5! = 120, 尾数中有 1 个零

说明: 你算法的时间复杂度应为 O(log n) 。

解题思路与代码

这道题,乍一看很简单,实则还是考到了点其他的数学知识的。

比如:

  • 阶乘的计算:题目要求计算 n!,也就是 n 阶乘。n 阶乘表示从 1 到 n 的所有整数的乘积,即 n! = 1 × 2 × 3 × … × n。

  • 数学知识 - 因子:这道题的关键是理解尾随零是由因子 2 和 5 相乘得到的。在 n! 的因式分解中,我们需要找到因子 2 和 5 的数量。

  • 优化算法:题目要求算法的时间复杂度为 O(log n),这意味着我们需要找到一种有效的方法来计算 n! 中因子 5 的个数。在这个过程中,我们发现因子 2 的个数总是多于因子 5 的个数,因此我们只需计算 n! 中有多少个因子 5。通过不断地将 n 除以 5,我们可以找到所有的因子 5,从而有效地降低时间复杂度。

  • 避免整数溢出:原始代码试图计算 n! 的值,但这在 n 较大时可能导致整数溢出。优化后的代码通过计算因子 5 的个数来避免了这个问题,因为我们不需要实际计算 n! 的值。

具体代码如下:

class Solution {
public:
    int trailingZeroes(int n) {
        int count = 0;
        while (n >= 5) {
            n /= 5;
            count += n;
        }
        return count;
    }
};

复杂度分析

时间复杂度:O(logn)
空间复杂度:O(1)
在这里插入图片描述

总结

这道题考到了数论,因子计数的数学概念,如果你不了解这些数学概念,这道题还真不是一道简单的题。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

米哈游新游正式公测!还没上线就已经“爆了”!

米哈游制作的3D冒险主题回合制策略游戏《崩坏:星穹铁道》,在2023年4月26日正式开启全平台公测。 该游戏在2021年10月27日曾开启过“始发测试”,后继续沉淀了两年才正式开启公测。 B站的ACG内容生态丰富,其中游戏相关内容当数米哈…

锂溶液净化和提纯

锂离子电池是一种充电电池,依靠锂离子在正极和负极之间移动来工作,广泛应用在便携式设备、卫星、储备电源、电动汽车等领域,具有替代各种二次电源的潜力。 近年来国家大力提倡和发展的新能源产业,锂离子电池的需求量的不断攀升&a…

聊聊「低代码」的实践之路

区块链、低代码、元宇宙、AI智能; 01 【先来说说背景】 这个概念由来已久,但是在国内兴起,是最近几年; 低代码即「Low-Code」; 指提供可视化开发环境,可以用来创建和管理软件应用; 简单的说…

Apache Zeppelin系列教程第一篇——安装和使用

一、Apache Zeppelin 介绍 Apache Zeppelin是一种开源的Web笔记本类型交互式数据分析工具,它提供了基于浏览器的界面,允许数据工程师和科学家通过各种语言和工具,如Scala, Python, SQL, R,等等,交互式地进行数据分析、可视化以及…

成功解决长时间挂起虚拟机后再次打开无法连接网络,并提示网络激活失败(亲测有效)

成功解决长时间挂起虚拟机后再次打开无法连接网络,并提示网络激活失败(亲测有效!) 之前做区块链的一个虚拟机很久没打开,一直处于挂起状态,一直提示网络连接激活失败。试了很多种方法没解决,更…

如何设置ddns动态域名实现内网发布外网

在本地搭建好服务器,部署好web网站或其他应用后,需要设置动态域名服务ddns,将主机的内网IP端口映射到外网访问,才能实现在外网访问内网。今天小编就和大家分享一下内网发布外网方案,即如何设置ddns动态域名服务实现外网…

【hello Linux】可重入函数、volatile和SIGCHLD信号

目录 1. 可重入函数 2. volatile 3. SIGCHLD信号 Linux!🌷 1. 可重入函数 先来谈一下重入函数的概念:重入函数便是在该函数还没有执行完毕便重复进入该函数(一般发生在多线程中); 可重入函数&#xff1a…

【私有云底层】理解OpenStack核心组件

文章目录 👹 关于作者一、Keystone 身份认证服务Keystone 架构工作流程 二、Glance 镜像服务Glance 架构磁盘与容器Glance 工作流程 三、Placement 放置服务Placement 工作流程 四、Nova 计算服务Nova 架构Nova 工作流程 五、Neutron 网络服务Neutron 架构Neutron 支…

浅谈测试用例设计 | 京东云技术团队

作者:京东物流 王莹莹 一、测试用例为什么存在 1.1 定义 测试用例(Test Case)是指对特定的软件产品进行测试任务的描述,体现测试方案、方法、技术和策略。测试用例内容包括测试目标、测试环境、输入数据、测试步骤、预期结果、测试脚本等,…

FreeRTOS系统学习第一步:新建 FreeRTOS 工程—软件仿真

创建一个FreeRTOS系统工程 1.新建工程文件夹2.Keil新建工程2.1 New Project2.2 Select Device For Target2.3 Manage Run-Time Environment 3. 在 KEIL 工程里面新建文件组3.1在 KEIL 工程里面添加文件 4. 编写 main 函数5. 调试配置5.1 设置软件仿真5.2 修改时钟大小在时钟相关…

基于python的socket网络通信【1】

一、Socket原理 学习了大佬的知识,简单记一些笔记 https://www.jianshu.com/p/066d99da7cbd http://c.biancheng.net/view/2351.html 1.1什么是Socket 在计算机通信领域,socket 被翻译为“套接字”,它是计算机之间进行通信的一种约定或一种…

计算机网路常见面试题(上)

计算机网络基础 # 网络分层模型 # OSI 七层模型是什么?每一层的作用是什么? OSI 七层模型 是国际标准化组织提出一个网络分层模型,其大体结构以及每一层提供的功能如下图所示: 每一层都专注做一件事情,并且每一层都…

网络安全:namp扫描工具

-sP可以扫描一个网段ip以及状态和基本信息,10.1.1.2-3就是扫描2和3这两个ip的主机 -p可以扫描指定ip对应主机的端口号,可以是一个范围 nmap简单扫描:nmap 地址 检查地址是否在线以及open的端口号 在端口开放,不一定可以与对方正常…

Spring 依赖注入源码

文章目录 依赖注入原始依赖注入方式注解方式寻找注入点注入点进行注入 从BeanFactory中找注入对象总结 依赖注入 具体代码是在AbstractAutowireCapableBeanFactory类的populateBean()方法,此方法中主要做的事情如下: 实例化之后,调用Instan…

各大外卖平台占据共享经济市场主要份额,占比近50%

哈喽大家好,随着大量互联网用户和移动支付的普及、大量用户通过共享平台将闲置资源和服务与需求方进行匹配,实现了资源的高效利用和消费者福利的提升。在全球化驱动的新型消费需求以及政策支持下,共享经济正在向更加成熟和规范化的方向发展。…

瑞芯微RK3568智慧视频录像机NVR设备解决方案

NVR技术应用功能模式,较为灵活且能够在很大程度上满足当今视频监控系统功能需求。以NVR技术为核心的小型NVR方案,具有规模较小、操作灵活、使用方便、经济实用等优点,其前端主要配合高清视频摄像机支持8路720P的高清视频图像接入,…

13-NumPy

文章目录 一.基础1.Ndarray对象2.数据类型 二.数组1.数组属性(1)arange(2)shape(3)ndim(4)itemsize 2.创建数组(1)empty(2)zero&#…

Chat GPT在全球变暖中的潜在应用

01 摘要 气候变化是一个全球性的重大挑战,需要整合包括大气科学、海洋学和生态学在内的许多不同科学领域。解决这一问题的复杂性和规模需要利用先进的工具和技术来理解、建模和预测未来的气候状况。人工智能和自然语言处理技术,如Chat GPT,…

Maven 依赖下载失败解决方案——配置国内源 + 具体解决办法

目录 前言 一、配置 Maven 国内源 二、重新下载jar包 三、其他问题 前言 最近发现 spring-boot 框架更新到 2.7.11 了,由于以前一直使用的是 2.7.9 ,所以一直出现依赖下载失败的问题,实际上这是由于 IDEA 会先加载之前下载好的依赖&#xf…

Linux操作系统命令大全

Linux是一种操作系统 Operating System 简称 OS ,是软件的一部分,它是硬件基础上的第一层软件,是硬件和其它软件沟通的桥梁。 操作系统会控制其他程序运行,管理系统资源,提供最基本的计算功能,如管理及配置…