谷歌(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

相关文章

Java中的StringBuilder之如何高效构建字符串

《Java中的StringBuilder之如何高效构建字符串》本文将深入浅出地介绍StringBuilder的使用方法、性能优势以及相关字符串处理技术,结合代码示例帮助读者更好地理解和应用,希望对大家... 目录关键点什么是 StringBuilder?为什么需要 StringBuilder?如何使用 St

Java并发编程之如何优雅关闭钩子Shutdown Hook

《Java并发编程之如何优雅关闭钩子ShutdownHook》这篇文章主要为大家详细介绍了Java如何实现优雅关闭钩子ShutdownHook,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起... 目录关闭钩子简介关闭钩子应用场景数据库连接实战演示使用关闭钩子的注意事项开源框架中的关闭钩子机制1.

Java中字符串转时间与时间转字符串的操作详解

《Java中字符串转时间与时间转字符串的操作详解》Java的java.time包提供了强大的日期和时间处理功能,通过DateTimeFormatter可以轻松地在日期时间对象和字符串之间进行转换,下面... 目录一、字符串转时间(一)使用预定义格式(二)自定义格式二、时间转字符串(一)使用预定义格式(二)自

Java数组初始化的五种方式

《Java数组初始化的五种方式》数组是Java中最基础且常用的数据结构之一,其初始化方式多样且各具特点,本文详细讲解Java数组初始化的五种方式,分析其适用场景、优劣势对比及注意事项,帮助避免常见陷阱... 目录1. 静态初始化:简洁但固定代码示例核心特点适用场景注意事项2. 动态初始化:灵活但需手动管理代

Java字符串操作技巧之语法、示例与应用场景分析

《Java字符串操作技巧之语法、示例与应用场景分析》在Java算法题和日常开发中,字符串处理是必备的核心技能,本文全面梳理Java中字符串的常用操作语法,结合代码示例、应用场景和避坑指南,可快速掌握字... 目录引言1. 基础操作1.1 创建字符串1.2 获取长度1.3 访问字符2. 字符串处理2.1 子字

一文详解如何在Python中从字符串中提取部分内容

《一文详解如何在Python中从字符串中提取部分内容》:本文主要介绍如何在Python中从字符串中提取部分内容的相关资料,包括使用正则表达式、Pyparsing库、AST(抽象语法树)、字符串操作... 目录前言解决方案方法一:使用正则表达式方法二:使用 Pyparsing方法三:使用 AST方法四:使用字

Java字符串处理全解析(String、StringBuilder与StringBuffer)

《Java字符串处理全解析(String、StringBuilder与StringBuffer)》:本文主要介绍Java字符串处理全解析(String、StringBuilder与StringBu... 目录Java字符串处理全解析:String、StringBuilder与StringBuffer一、St

C++中初始化二维数组的几种常见方法

《C++中初始化二维数组的几种常见方法》本文详细介绍了在C++中初始化二维数组的不同方式,包括静态初始化、循环、全部为零、部分初始化、std::array和std::vector,以及std::vec... 目录1. 静态初始化2. 使用循环初始化3. 全部初始化为零4. 部分初始化5. 使用 std::a

shell编程之函数与数组的使用详解

《shell编程之函数与数组的使用详解》:本文主要介绍shell编程之函数与数组的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录shell函数函数的用法俩个数求和系统资源监控并报警函数函数变量的作用范围函数的参数递归函数shell数组获取数组的长度读取某下的

MySQL更新某个字段拼接固定字符串的实现

《MySQL更新某个字段拼接固定字符串的实现》在MySQL中,我们经常需要对数据库中的某个字段进行更新操作,本文就来介绍一下MySQL更新某个字段拼接固定字符串的实现,感兴趣的可以了解一下... 目录1. 查看字段当前值2. 更新字段拼接固定字符串3. 验证更新结果mysql更新某个字段拼接固定字符串 -