2026-08-04:有效数字整数。用go语言,给定一个整数 n 和一个数字 x。当 n 的十进制表示中至少出现一次 x,并且最高位不是 x 时,称 n 是

网易专栏4天前发布 nxnqh
15 0 0

🤖 AI总结

主题

使用Go语言实现判断整数n是否有效(包含数字x且最高位不是x)的算法。

摘要

文章介绍了用Go语言实现判断整数n是否有效的算法,通过剥离低位检查非最高位是否包含数字x,并确保最高位不等于x,提供了详细代码和复杂度分析。

关键信息

  • 1 通过循环剥离低位数字来判断非最高位是否包含x
  • 2 最高位通过循环结束后剩余的n判断
  • 3 算法时间复杂度O(d),空间复杂度O(1)

2026-08-04:有效数字整数。用go语言,给定一个整数 n 和一个数字 x。

当 n 的十进制表示中至少出现一次 x,并且最高位不是 x 时,称 n 是有效的。

请判断 n 是否满足这一条件,满足则返回真,否则返回假。

0 <= n <= 100000。

0 <= x <= 9。

输入: n = 101, x = 0。

输出: true。

解释:

该数字在下标 1 处包含数字 0。它不以 0 开头,因此满足两个条件。所以,答案是 true。

题目来自力扣3908。

详细描述执行过程:

1.函数入口与变量初始化
函数validDigit接收两个参数:整数n(待判断的数字)和整数x(目标数字)。
内部定义布尔变量hasX并初始化为false,它将用于标记在非最高位的其它十进制位中是否至少出现过一次数字x

  • 2.剥离低位数字的循环
    进入for循环,循环条件是n >= 10。这一条件保证循环只处理仍有至少两位数字的情况,也就是每次都能剥离出当前的最低位,且剥离后剩下的部分至少还有一位(最终会成为最高位)。
    在每一次循环中:

    • 计算n % 10,得到当前n最低位数字

  • • 将该低位数字与x比较:如果相等,就把hasX置为true。这意味着在非最高位中发现了一次目标数字。

  • • 执行n /= 10,丢弃已检查的最低位,把剩下的高位部分作为新的n,继续下一轮判断。
    这个循环不断“从右向左”扫描十进制位,直到剩余部分只剩下最高位一位数字(即n < 10)为止。

    3.处理最高位并返回结果
    循环结束时,变量n已经变成了原整数最高位的那一个数字(例如对于101,最终n = 1)。
    此时,hasX已经记录了除最高位外是否出现过x
    函数最后的返回语句是:

    return hasX && n != x

    它同时检查两个条件:

    • hasXtrue:表示在非最高位中,至少出现了一次数字x

    • n != x:表示最高位数字不等于x
      仅当两个条件都满足时,才认为n是“有效”的,返回true;否则返回false

    4.具体示例的执行轨迹(n = 101, x = 0)

    • 初始:n = 101hasX = false

  • • 第一次循环:n >= 10成立,n % 10 = 1≠ 0,hasX保持false;然后n = 101 / 10 = 10

  • • 第二次循环:n >= 10成立,n % 10 = 0==xhasX变为true;然后n = 10 / 10 = 1

  • • 循环条件检查:此时n = 1,不满足n >= 10,循环终止。

  • • 返回:hasXtruen (1) != x (0)成立,结果为true。这与题目解释一致。

    5.边界情况覆盖

    • 如果n是一位数(0~9),循环不会执行,hasX保持false,最终返回false。这符合题意,因为一位数要么没有其它位出现x,要么本身既是最高位又是唯一出现x的位(最高位等于x),必然不满足两个条件。

  • • 如果x只出现在最高位(例如n = 101, x = 1),那么循环中hasXfalse(其它位没有 1),最终返回false,符合“最高位不是 x”的要求。

  • • 如果n = 0, x = 0,循环不执行,hasXfalsen为 0,返回false,也正确,因为最高位是 0 且没有其它位出现 0。

    时间复杂度分析
    循环的执行次数等于整数n的十进制位数减 1(即去掉最高位后的位数)。设n的位数为dd = ⌊log₁₀ n⌋ + 1n > 0)。循环执行d - 1次,时间复杂度为O(d),也可以表示为O(log₁₀ n)
    由于题目中n最大为100000(6 位数),实际循环次数不超过 5 次,可以视作常数时间O(1)

    额外空间复杂度分析
    函数内部只使用了固定数量的基础变量(hasX布尔变量、循环中的临时值),不分配任何与输入规模相关的额外内存。因此,总额外空间复杂度为O(1)

    Go完整代码如下:

    package main

    import (
    "fmt"
    )

    func validDigit(n, x int) bool {
    hasX := false
    for ; n >= 10; n /= 10 {
    if n%10 == x {
    hasX = true
    }
    }
    return hasX && n != x
    }

    func main() {
    n := 101
    x := 0
    result := validDigit(n, x)
    fmt.Println(result)
    }

    2026-08-04:有效数字整数。用go语言,给定一个整数 n 和一个数字 x。当 n 的十进制表示中至少出现一次 x,并且最高位不是 x 时,称 n 是

    Python完整代码如下:

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

    def valid_digit(n: int, x: int) -> bool:
    has_x = False
    while n >= 10:
    if n % 10 == x:
    has_x = True
    n //= 10
    return has_x and n != x

    def main():
    n = 101
    x = 0
    result = valid_digit(n, x)
    print(result)

    if __name__ == "__main__":
    main()

    2026-08-04:有效数字整数。用go语言,给定一个整数 n 和一个数字 x。当 n 的十进制表示中至少出现一次 x,并且最高位不是 x 时,称 n 是

    C++完整代码如下:

      
    
    using namespace std;

    bool validDigit(int n, int x) {
    bool hasX = false;
    while (n >= 10) {
    if (n % 10 == x) {
    hasX = true;
    }
    n /= 10;
    }
    return hasX && (n != x);
    }

    int main() {
    int n = 101;
    int x = 0;
    bool result = validDigit(n, x);
    cout << boolalpha << result << endl;
    return 0;
    }

    2026-08-04:有效数字整数。用go语言,给定一个整数 n 和一个数字 x。当 n 的十进制表示中至少出现一次 x,并且最高位不是 x 时,称 n 是

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

    © 版权声明

    相关文章