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[i1]将这两个字符转换成它们对应的整数值。字符’0’对应整数01’对应整数1依此类推。在Go语言中对字符做int()转换会得到该字符的ASCII码比如’0’是481’是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完整代码如下packagemainimport(fmt)funcisAdjacentDiffAtMostTwo(sstring)bool{fori:rangelen(s)-1{ifabs(int(s[i])-int(s[i1]))2{returnfalse}}returntrue}funcabs(xint)int{ifx0{return-x}returnx}funcmain(){s:132result:isAdjacentDiffAtMostTwo(s)fmt.Println(result)}Python完整代码如下# -*-coding:utf-8-*-defabs_value(x:int)-int:return-xifx0elsexdefis_adjacent_diff_at_most_two(s:str)-bool:foriinrange(len(s)-1):ifabs_value(ord(s[i])-ord(s[i1]))2:returnFalsereturnTrue# 测试s132resultis_adjacent_diff_at_most_two(s)print(result)C完整代码如下#includeiostream#includestring#includecmathusingnamespacestd;boolisAdjacentDiffAtMostTwo(conststrings){for(size_t i0;is.length()-1;i){if(abs(s[i]-s[i1])2){returnfalse;}}returntrue;}intmain(){string s132;coutboolalphaisAdjacentDiffAtMostTwo(s)endl;return0;}