2026-08-24:检查相邻数字差。用go语言,给定一个纯数字字符串,你需要检查其中任意两个紧挨着的数字,它们数值上的差距是否都不会超过 2

网易专栏23小时前发布 nxnqh
3 0 0

🤖 AI总结

主题

使用Go语言解决检查相邻数字差是否不超过2的算法问题。

摘要

文章讲解如何用Go语言检查字符串中相邻数字差值是否均不超过2,提供多语言实现及复杂度分析。

关键信息

  • 1 给定数字字符串,检查所有相邻数字的绝对差值是否都不超过2。
  • 2 提供了Go、Python、C++三种语言的完整实现。
  • 3 时间复杂度O(n),额外空间复杂度O(1)。

2026-08-24:检查相邻数字差。用go语言,给定一个纯数字字符串,你需要检查其中任意两个紧挨着的数字,它们数值上的差距是否都不会超过 2。

如果整串数字中所有相邻位置都满足这个条件,就返回“是”(true);只要有一处相邻数字的差值大于 2,就返回“否”(false)。

这里的差值指的是两个数字相减后取绝对值。

2 <= s.length <= 100。

s 仅由数字组成。

输入: s = “132”。

输出: true。

解释:

s[0] 和 s[1] 处数字的绝对差为 abs(1 – 3) = 2。

s[1] 和 s[2] 处数字的绝对差为 abs(3 – 2) = 1。

由于两个差值都至多为 2,因此答案为 true。

题目来自力扣3931。

详细步骤分解

第一步:获取输入字符串
程序接收一个字符串s,例如”132″。这个字符串只包含数字字符’0’到’9’,长度在2到100之间。

第二步:准备遍历
我们要检查的是相邻位置,所以需要从字符串的第一个字符开始,一直检查到倒数第二个字符。对于长度为n的字符串,需要检查的位置对是(0,1)、(1,2)、…、(n-2,n-1),总共n-1对。

第三步:逐个检查相邻数字对
在每次循环中:

• 取出当前位置的字符s[i]和下一个位置的字符s[i+1]

  • • 将这两个字符转换成它们对应的整数值。字符’0’对应整数0,’1’对应整数1,依此类推。在Go语言中,对字符做int()转换会得到该字符的ASCII码,比如’0’是48,’1’是49,所以两个字符的ASCII码差值就等于它们所代表数字的差值,因此可以直接用ASCII码相减。

  • • 计算这两个整数的绝对差值。如果差值为负数,就取它的相反数;如果为正或零,就保持原值。

  • • 将这个绝对差值与2进行比较:如果大于2,说明这一对相邻数字不符合要求,立即返回false,整个函数结束。

    第四步:完成全部检查
    如果循环完整执行完毕,没有遇到任何差值大于2的情况,说明所有相邻数字对都满足条件,此时返回true。

    第五步:输出结果
    在主函数中,将返回的布尔值打印出来,在Go中布尔值的默认输出就是true或false。

    针对示例”132″的执行过程

    • 第一次循环检查位置0和1:字符’1’和’3’,ASCII码分别是49和51,差值绝对值为2,不大于2,继续。

  • • 第二次循环检查位置1和2:字符’3’和’2’,ASCII码分别是51和50,差值绝对值为1,不大于2,继续。

  • • 循环结束,所有相邻对都检查通过,返回true并打印输出。

    时间复杂度和空间复杂度

    时间复杂度:O(n),其中n是字符串的长度。程序只需要遍历一次字符串,对每个相邻位置做常数时间的计算和比较操作。最坏情况下,如果所有相邻差值都满足条件,会检查n-1对;如果中途发现不符合,则提前终止,但总体仍不超过n-1次操作。因此时间复杂度与字符串长度呈线性关系。

    额外空间复杂度:O(1),即常数级别。程序在检查过程中只使用了几个临时变量来存储字符值、差值等,没有使用随输入规模增长的额外数据结构(如数组、切片、映射等)。无论字符串多长,占用的额外内存空间都是固定的少量字节。

    Go完整代码如下:

    package main

    import (
    "fmt"
    )

    func isAdjacentDiffAtMostTwo(s string) bool {
    for i := range len(s) - 1 {
    if abs(int(s[i])-int(s[i+1])) > 2 {
    return false
    }
    }
    return true
    }

    func abs(x int) int {
    if x < 0 {
    return -x
    }
    return x
    }

    func main() {
    s := "132"
    result := isAdjacentDiffAtMostTwo(s)
    fmt.Println(result)
    }

    2026-08-24:检查相邻数字差。用go语言,给定一个纯数字字符串,你需要检查其中任意两个紧挨着的数字,它们数值上的差距是否都不会超过 2

    Python完整代码如下:

    # -*-coding:utf-8-*-

    def abs_value(x: int) -> int:
    return -x if x < 0 else x

    def is_adjacent_diff_at_most_two(s: str) -> bool:
    for i in range(len(s) - 1):
    if abs_value(ord(s[i]) - ord(s[i+1])) > 2:
    return False
    return True

    # 测试
    s = "132"
    result = is_adjacent_diff_at_most_two(s)
    print(result)

    2026-08-24:检查相邻数字差。用go语言,给定一个纯数字字符串,你需要检查其中任意两个紧挨着的数字,它们数值上的差距是否都不会超过 2

    C++完整代码如下:

      
    


    using namespace std;

    bool isAdjacentDiffAtMostTwo(const string& s) {
    for (size_t i = 0; i < s.length() - 1; i++) {
    if (abs(s[i] - s[i+1]) > 2) {
    return false;
    }
    }
    return true;
    }

    int main() {
    string s = "132";
    cout << boolalpha << isAdjacentDiffAtMostTwo(s) << endl;
    return 0;
    }

    2026-08-24:检查相邻数字差。用go语言,给定一个纯数字字符串,你需要检查其中任意两个紧挨着的数字,它们数值上的差距是否都不会超过 2

    我们相信人工智能为普通人提供了一种“增强工具”,并致力于分享全方位的AI知识。在这里,您可以找到最新的AI科普文章、工具评测、提升效率的秘籍以及行业洞察。 欢迎关注“福大大架构师每日一题”,发消息可获得面试资料,让AI助力您的未来发展。

    © 版权声明

    相关文章