谷歌(Google)历年编程真题——数组和字符串(加一)

Google 希望了解你的编码技能和专业技术知识,包括工具、编程语言,以及关于数据结构和算法等主题的一般知识。讨论过程中通常会反复提到相关的话题,就像在工作中的讨论那样,从而推动彼此思考并学习不同的方法。无论你的工作经验如何,Google 都非常重视你的分析能力。请准备好展示你在数据结构和算法方面的扎实功底。

加一

给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。

最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。

你可以假设除了整数 0 之外,这个整数不会以零开头。

示例 1

输入:digits = [1,2,3]
输出:[1,2,4]
解释:输入数组表示数字 123。

示例 2

输入:digits = [4,3,2,1]
输出:[4,3,2,2]
解释:输入数组表示数字 4321。

示例 3

输入:digits = [0]
输出:[1]

提示

  • 1 <= digits.length <= 100
  • 0 <= digits[i] <= 9

思路一:

可以通过模拟加法的过程来解决。具体步骤如下:

  1. 从数组的最后一位开始,依次向前遍历数组。
  2. 对于每一位,先加上1,然后判断是否产生进位。
  3. 如果没有产生进位,则直接返回当前数组。
  4. 如果产生进位,则将当前位的值设为0,并继续向前进位。
  5. 如果遍历完成后还有进位,则在数组最前面插入一个1。

代码示例1

def plusOne(digits):n = len(digits)for i in range(n - 1, -1, -1):digits[i] += 1if digits[i] < 10:return digitselse:digits[i] = 0# 如果遍历完成后还有进位,则在数组最前面插入一个1return [1] + digits# 示例 1
digits1 = [1, 2, 3]
print(plusOne(digits1))  # 输出:[1, 2, 4]# 示例 2
digits2 = [4, 3, 2, 1]
print(plusOne(digits2))  # 输出:[4, 3, 2, 2]# 示例 3
digits3 = [0]
print(plusOne(digits3))  # 输出:[1]

这个函数从数组的最后一位开始,依次向前遍历数组。对于每一位,先加上1,然后判断是否产生进位。如果没有产生进位,则直接返回当前数组。如果产生进位,则将当前位的值设为0,并继续向前进位。如果遍历完成后还有进位,则在数组最前面插入一个1。

思路二:

第二种解题思路是将数组表示的整数转换为数字,然后进行加一操作,最后再将结果转换回数组。具体步骤如下:

  1. 将数组中的每一位数字拼接成一个整数。
  2. 将得到的整数加一。
  3. 将加一后的结果转换为字符串,并逐位拆分为数组。
  4. 返回拆分后的数组作为结果。

代码示例2

def plusOne(digits):# 将数组中的每一位数字拼接成一个整数num = 0for digit in digits:num = num * 10 + digit# 将得到的整数加一num += 1# 将加一后的结果转换为字符串,并逐位拆分为数组result = []for char in str(num):result.append(int(char))return result# 示例 1
digits1 = [1, 2, 3]
print(plusOne(digits1))  # 输出:[1, 2, 4]# 示例 2
digits2 = [4, 3, 2, 1]
print(plusOne(digits2))  # 输出:[4, 3, 2, 2]# 示例 3
digits3 = [0]
print(plusOne(digits3))  # 输出:[1]

这个函数首先将数组中的每一位数字拼接成一个整数,然后将得到的整数加一。接着将加一后的结果转换为字符串,并逐位拆分为数组。最后返回拆分后的数组作为结果。

思路三:

我们可以采用递归的方法实现。具体步骤如下:

  1. 从数组的最后一位开始递归处理。
  2. 当前位加一后取余数,即 digits[i] = (digits[i] + 1) % 10
  3. 如果当前位加一后不产生进位,则递归结束。
  4. 如果当前位加一后产生进位,则继续递归处理前一位。
  5. 如果递归到第一位仍然产生进位,则在数组最前面插入一个1。

代码示例3

def plusOne(digits):def recursive_helper(i):if i < 0:return [1] + digitsdigits[i] = (digits[i] + 1) % 10if digits[i] != 0:return digitselse:return recursive_helper(i - 1)return recursive_helper(len(digits) - 1)# 示例 1
digits1 = [1, 2, 3]
print(plusOne(digits1))  # 输出:[1, 2, 4]# 示例 2
digits2 = [4, 3, 2, 1]
print(plusOne(digits2))  # 输出:[4, 3, 2, 2]# 示例 3
digits3 = [0]
print(plusOne(digits3))  # 输出:[1]

这个函数采用递归的方法,从数组的最后一位开始递归处理。当前位加一后取余数,如果不产生进位则递归结束,否则继续递归处理前一位。如果递归到第一位仍然产生进位,则在数组最前面插入一个1。

谷歌(Google)技术面试系列

  • 谷歌(Google)技术面试概述
  • 谷歌(Google)历年编程真题——数组和字符串(螺旋矩阵)
  • 谷歌(Google)历年编程真题——数组和字符串(加一)
  • 谷歌(Google)技术面试——在线评估问题(一)
  • 谷歌(Google)技术面试——在线评估问题(二)
  • 谷歌(Google)技术面试——在线评估问题(三)
  • 谷歌(Google)技术面试——在线评估问题(四)
  • 谷歌(Google)技术面试——全部面试流程

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

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

相关文章

使用Arcpy进行数据批处理-批量裁剪

时空大数据使我们面临前所未有的机遇和挑战&#xff0c;尤其在地学、遥感或空间技术等专业领域&#xff0c;无疑是一个全新的时代。 伴随着时空大数据的到来&#xff0c;海量数据的处理是一个所有科研工作者都无法忽视的重要问题。传统的数据&#xff08;主要指空间数据&#x…

Docker实战教程 第1章 Linux快速入门

2-1 Linux介绍 为什么要学Linux 三个不得不学习 课程需要&#xff1a;Docker开发最好在Linux环境下。 开发需要&#xff1a;作为一个后端程序员&#xff0c;是必须要掌握Linux的&#xff0c;这是找工作的基础门槛。 运维需要&#xff1a;在服务器端&#xff0c;主流的大型服…

SDWebImage源码解析---疑难问题解答

SDWebImage的简单流程图&#xff1a; 上图大致流程是对的&#xff0c;有几个没写到的地方&#xff1a; 首先判断url的类型是不是URL类型或string类型&#xff0c;判断url是否为nil占位图更早一些&#xff0c;在url判断后&#xff0c;就行显示占位图加载沙盒中对应的图片后&…

Premiere Pro 2024:赋予创意翅膀,让你的视频飞翔 mac/win版

Premiere Pro 2024&#xff0c;作为Adobe旗下的旗舰视频编辑软件&#xff0c;自推出以来&#xff0c;一直在视频制作领域占据着重要的地位。随着技术的不断进步和创新&#xff0c;Premiere Pro 2024为用户带来了前所未有的编辑体验&#xff0c;重新定义了视频制作的标准。 Pre…

Marketo营销自动化集成Zoho CRM

Marketo 本身是一种营销自动化工具&#xff0c;可让您根据指定的标准对潜在客户进行评分&#xff0c;并确定哪些潜在客户最有可能进行转化。 CRM 和 Marketo 之间的紧密集成可帮助您规划销售和营销活动&#xff0c;以培育这些高价值潜在客户并最大限度地提高您的团队可以赢得的…

【案例】--“超大容量”存储思考

目录 一、前言二、GridFS三、利用GridFS实现“超大容量的二进制流”的存储一、前言 案例背景: 最近项目遇到一个问题,用户在创作时,有文件流、图片、超链接、文本等信息产生,而这些信息的容量高达几十M【超大容量的信息】。由于历史技术方案局限性,将超大容量的信息存入m…

数字逻辑分析仪初体验

为啥会用到这玩意儿&#xff0c;要从一个荒诞的需求开始。想在市面上找一款特别低空飞行的监控&#xff0c;而且不想它一直开着监控&#xff0c;最好是我在外面远程指挥它起飞&#xff0c;飞去厨房&#xff0c;飞去洗手间&#xff0c;甚至飞去阳台&#xff0c;查看水龙头情况啊…

Nuxt 项目的创建

中文文档&#xff1a;https://nuxt.com.cn/docs/getting-started/installation#%E6%96%B0%E9%A1%B9%E7%9B%AE Nuxt 项目创建的先决条件&#xff1a; Node.js 版本 18.0.0 及以上文本编辑器&#xff1a;VS Code Volar 插件 或 Webstorm 执行如下命令&#xff0c;创建 Nuxt 项目…

【Canvas技法】用椭圆绘制经纬线

【图示】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>用椭圆绘制经纬线</title><style type"text/css"…

每日一题 第七十四期 洛谷 [HNOI2003] 激光炸弹

[HNOI2003] 激光炸弹 题目描述 一种新型的激光炸弹&#xff0c;可以摧毁一个边长为 m m m 的正方形内的所有目标。现在地图上有 n n n 个目标&#xff0c;用整数 x i x_i xi​ , y i y_i yi​ 表示目标在地图上的位置&#xff0c;每个目标都有一个价值 v i v_i vi​。激…

相对论中关于光速不变理解的补充

近几个月在物理直播间聊爱因斯坦相对论&#xff0c;发现好多人在理解爱因斯坦相对论关于基本假设&#xff0c;普遍认为光速是不变的&#xff0c;质能方程 中光速的光速不变的&#xff0c;在这里我对这个假设需要做一个补充&#xff0c;他是基于质能方程将光速C 在真是光速变化曲…

Allavsoft for Mac v3.27.0.8852注册激活版 优秀的视频下载工具

Allavsoft for Mac是一款功能强大的多媒体下载和转换工具&#xff0c;支持从各种在线视频网站和流媒体服务下载视频、音频和图片。它具备批量下载和转换功能&#xff0c;可将文件转换为多种格式&#xff0c;以适应不同设备的播放需求。此外&#xff0c;Allavsoft还提供视频编辑…

最新版两款不同版SEO超级外链工具PHP源码

可根据个人感觉喜好自行任意选择不同版本使用&#xff08;版V1或版V2&#xff09; 请将zip文件全部解压缩即可访问&#xff01; 源码全部开源&#xff0c;支持上传二级目录访问 #已更新增加大量高质量外链&#xff08;若需要增加修改其他外链请打开txt文件&#xff09; #修…

贪心算法|53.最大子序和

力扣题目链接 class Solution { public:int maxSubArray(vector<int>& nums) {int result INT32_MIN;int count 0;for (int i 0; i < nums.size(); i) {count nums[i];if (count > result) {result count;}if (count < 0) count 0;}return result;} …

SpringBoot+ECharts+Html 字符云/词云案例详解

1. 技术点 SpringBoot、MyBatis、thymeleaf、MySQL、ECharts 等 2. 准备条件 在mysql中创建数据库echartsdb&#xff0c;数据库中创建表t_comment表&#xff0c;表中设置两个字段word与count&#xff0c;添加表中的数据。如&#xff1a;附件中的 echartsdb.sql 3. SpringBoot…

CAD Plant3D 2024 下载地址及安装教程

CAD Plant3D是一款专业的三维工厂设计软件&#xff0c;用于在工业设备和管道设计领域进行建模和绘图。它是Autodesk公司旗下的AutoCAD系列产品之一&#xff0c;专门针对工艺、石油、化工、电力等行业的设计和工程项目。 CAD Plant3D提供了一套丰富的工具和功能&#xff0c;帮助…

网络基础二——TCP可靠性实现机制补充2

验证客户端和服务端三次握手和四次挥手时的状态 三次握手 #include <sys/types.h> #include <sys/socket.h> int listen(int sockfd, int backlog);netstat ntp //查看连接的状态​ 将TCP服务端套接字设置为listen状态之后&#xff0c;此时服务端是处于L…

水泥5G智能制造工厂数字孪生可视化平台,推进水泥行业数字化转型

水泥5G智能制造工厂数字孪生可视化平台&#xff0c;推进水泥行业数字化转型。水泥5G智能制造工厂数字孪生可视化平台&#xff0c;是水泥行业数字化转型的关键推手。数字孪生平台运用先进的信息技术和数字化手段&#xff0c;实现水泥生产过程的数字化模拟、可视化监控和智能化管…

常见的线程安全类

线程安全&#xff01;线程安全&#xff01;&#xff01;线程安全&#xff01;&#xff01;&#xff01; 鼠鼠我最近被线程安全这个词弄得好烦啊&#xff0c;那既然如此就来写一篇常见的线程安全类防止以后鼠鼠我的大脑又宕机了忘记了....... 这里我们讨论的线程安全的是指&am…

DVWA-File Inclusion通关教程-完结

DVWA-File Inclusion通关教程-完结 文章目录 DVWA-File Inclusion通关教程-完结页面功能LowMediumHighImpossible 页面功能 点击页面上提供的三个页面&#xff0c;单击这些文件就会显示其执行内容&#xff0c;同时发现提交是由GET方式进行&#xff0c;使用page参数传参。 …