本文主要是介绍谷歌(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,然后判断是否产生进位。
- 如果没有产生进位,则直接返回当前数组。
- 如果产生进位,则将当前位的值设为0,并继续向前进位。
- 如果遍历完成后还有进位,则在数组最前面插入一个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。
思路二:
第二种解题思路是将数组表示的整数转换为数字,然后进行加一操作,最后再将结果转换回数组。具体步骤如下:
- 将数组中的每一位数字拼接成一个整数。
- 将得到的整数加一。
- 将加一后的结果转换为字符串,并逐位拆分为数组。
- 返回拆分后的数组作为结果。
代码示例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]
这个函数首先将数组中的每一位数字拼接成一个整数,然后将得到的整数加一。接着将加一后的结果转换为字符串,并逐位拆分为数组。最后返回拆分后的数组作为结果。
思路三:
我们可以采用递归的方法实现。具体步骤如下:
- 从数组的最后一位开始递归处理。
- 当前位加一后取余数,即
digits[i] = (digits[i] + 1) % 10
。 - 如果当前位加一后不产生进位,则递归结束。
- 如果当前位加一后产生进位,则继续递归处理前一位。
- 如果递归到第一位仍然产生进位,则在数组最前面插入一个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)历年编程真题——数组和字符串(加一)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!