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

2024-04-07 01:20

本文主要是介绍谷歌(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)技术面试——全部面试流程

这篇关于谷歌(Google)历年编程真题——数组和字符串(加一)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/881313

相关文章

Springboot3+将ID转为JSON字符串的详细配置方案

《Springboot3+将ID转为JSON字符串的详细配置方案》:本文主要介绍纯后端实现Long/BigIntegerID转为JSON字符串的详细配置方案,s基于SpringBoot3+和Spr... 目录1. 添加依赖2. 全局 Jackson 配置3. 精准控制(可选)4. OpenAPI (Spri

MySQL JSON 查询中的对象与数组技巧及查询示例

《MySQLJSON查询中的对象与数组技巧及查询示例》MySQL中JSON对象和JSON数组查询的详细介绍及带有WHERE条件的查询示例,本文给大家介绍的非常详细,mysqljson查询示例相关知... 目录jsON 对象查询1. JSON_CONTAINS2. JSON_EXTRACT3. JSON_TA

使用Python实现base64字符串与图片互转的详细步骤

《使用Python实现base64字符串与图片互转的详细步骤》要将一个Base64编码的字符串转换为图片文件并保存下来,可以使用Python的base64模块来实现,这一过程包括解码Base64字符串... 目录1. 图片编码为 Base64 字符串2. Base64 字符串解码为图片文件3. 示例使用注意

golang float和科学计数法转字符串的实现方式

《golangfloat和科学计数法转字符串的实现方式》:本文主要介绍golangfloat和科学计数法转字符串的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望... 目录golang float和科学计数法转字符串需要对float转字符串做处理总结golang float

Python如何判断字符串中是否包含特殊字符并替换

《Python如何判断字符串中是否包含特殊字符并替换》这篇文章主要为大家详细介绍了如何使用Python实现判断字符串中是否包含特殊字符并使用空字符串替换掉,文中的示例代码讲解详细,感兴趣的小伙伴可以了... 目录python判断字符串中是否包含特殊字符方法一:使用正则表达式方法二:手动检查特定字符Pytho

JAVA数组中五种常见排序方法整理汇总

《JAVA数组中五种常见排序方法整理汇总》本文给大家分享五种常用的Java数组排序方法整理,每种方法结合示例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录前言:法一:Arrays.sort()法二:冒泡排序法三:选择排序法四:反转排序法五:直接插入排序前言:几种常用的Java数组排序

MySQL 字符串截取函数及用法详解

《MySQL字符串截取函数及用法详解》在MySQL中,字符串截取是常见的操作,主要用于从字符串中提取特定部分,MySQL提供了多种函数来实现这一功能,包括LEFT()、RIGHT()、SUBST... 目录mysql 字符串截取函数详解RIGHT(str, length):从右侧截取指定长度的字符SUBST

Python将字符串转换为小写字母的几种常用方法

《Python将字符串转换为小写字母的几种常用方法》:本文主要介绍Python中将字符串大写字母转小写的四种方法:lower()方法简洁高效,手动ASCII转换灵活可控,str.translate... 目录一、使用内置方法 lower()(最简单)二、手动遍历 + ASCII 码转换三、使用 str.tr

Java如何用乘号来重复字符串的功能

《Java如何用乘号来重复字符串的功能》:本文主要介绍Java使用乘号来重复字符串的功能,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java乘号来重复字符串的功能1、利用循环2、使用StringBuilder3、采用 Java 11 引入的String.rep

Python 异步编程 asyncio简介及基本用法

《Python异步编程asyncio简介及基本用法》asyncio是Python的一个库,用于编写并发代码,使用协程、任务和Futures来处理I/O密集型和高延迟操作,本文给大家介绍Python... 目录1、asyncio是什么IO密集型任务特征2、怎么用1、基本用法2、关键字 async1、async