跳转至

3908. 有效数字

题目描述

给你一个整数 n 和一个数字 x

如果一个数字满足以下条件,则认为它是 有效 的:

  • 它包含 至少一个 数字 x,并且
  • 不以 数字 x 开头。

如果 n有效 的,请返回 true,否则返回 false

 

示例 1:

输入: n = 101, x = 0

输出: true

解释:

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

示例 2:

输入: n = 232, x = 2

输出: false

解释:

该数字以 2 开头,违反了条件。所以,答案是 false

示例 3:

输入: n = 5, x = 1

输出: false

解释:

该数字不包含数字 1。所以,答案是 false

 

提示:

  • 0 <= n <= 105
  • 0 <= x <= 9

解法

方法一:模拟

我们用一个布尔变量 \(\textit{hasX}\) 来记录数字 \(x\) 是否出现在 \(n\) 中。

我们不断地取 \(n\) 的最后一位数字,并与 \(x\) 进行比较,如果相等,则将 \(\textit{hasX}\) 置为 \(\texttt{true}\)。同时,我们将 \(n\) 除以 \(10\) 来去掉最后一位数字。当 \(n\) 小于或等于 \(9\) 时,说明我们已经检查了所有的数字,此时如果 \(\textit{hasX}\)\(\texttt{true}\)\(n\) 不等于 \(x\),则说明 \(n\) 是一个有效数字,返回 \(\texttt{true}\);否则返回 \(\texttt{false}\)

时间复杂度 \(O(\log n)\),其中 \(n\) 是输入的整数。空间复杂度 \(O(1)\)

1
2
3
4
5
6
7
class Solution:
    def validDigit(self, n: int, x: int) -> bool:
        has_x = False
        while n > 9:
            has_x = has_x or n % 10 == x
            n //= 10
        return has_x and n != x
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
class Solution {
    public boolean validDigit(int n, int x) {
        boolean hasX = false;
        while (n > 9) {
            hasX = hasX || (n % 10 == x);
            n /= 10;
        }
        return hasX && (n != x);
    }
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
class Solution {
public:
    bool validDigit(int n, int x) {
        bool hasX = false;
        while (n > 9) {
            hasX = hasX || (n % 10 == x);
            n /= 10;
        }
        return hasX && (n != x);
    }
};
1
2
3
4
5
6
7
8
func validDigit(n int, x int) bool {
    hasX := false
    for n > 9 {
        hasX = hasX || (n%10 == x)
        n /= 10
    }
    return hasX && (n != x)
}
1
2
3
4
5
6
7
8
function validDigit(n: number, x: number): boolean {
    let hasX: boolean = false;
    while (n > 9) {
        hasX = hasX || n % 10 === x;
        n = Math.floor(n / 10);
    }
    return hasX && n !== x;
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
impl Solution {
    pub fn valid_digit(mut n: i32, x: i32) -> bool {
        let mut has_x = false;
        while n > 9 {
            has_x = has_x || (n % 10 == x);
            n /= 10;
        }
        has_x && (n != x)
    }
}

评论