列表

详情


6461. 判断一个数是否迷人

给你一个三位数整数 n 。

如果经过以下修改得到的数字 恰好 包含数字 1 到 9 各一次且不包含任何 0 ,那么我们称数字 n 是 迷人的 :

如果 n 是迷人的,返回 true,否则返回 false 。

连接 两个数字表示把它们首尾相接连在一起。比方说 121 和 371 连接得到 121371 。

 

示例 1:

输入:n = 192
输出:true
解释:我们将数字 n = 192 ,2 * n = 384 和 3 * n = 576 连接,得到 192384576 。这个数字包含 1 到 9 恰好各一次。

示例 2:

输入:n = 100
输出:false
解释:我们将数字 n = 100 ,2 * n = 200 和 3 * n = 300 连接,得到 100200300 。这个数字不符合上述条件。

 

提示:

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
class Solution { public: bool isFascinating(int n) { } };

golang 解法, 执行用时: 0 ms, 内存消耗: 1.9 MB, 提交时间: 2023-06-11 09:00:45

func isFascinating(n int) bool {
    return n == 192 || n == 219 || n == 273 || n == 327
}

java 解法, 执行用时: 10 ms, 内存消耗: 39.7 MB, 提交时间: 2023-06-11 08:59:13

class Solution {
    public boolean isFascinating(int n) {
        int n2 = n * 2;
        int n3 = n * 3;
        String v = String.valueOf(n) + String.valueOf(n2) + String.valueOf(n3);

        Set<Character> set = new HashSet<>();
        for(int i = 0;i< v.length();i++){
            if(v.charAt(i)== '0') return false;
            if(set.contains(v.charAt(i))) return false;
            set.add(v.charAt(i));
        }

        return true;
    }
}

cpp 解法, 执行用时: 0 ms, 内存消耗: 5.9 MB, 提交时间: 2023-06-11 08:58:43

class Solution {
public:
    bool isFascinating(int n) {
        if(n < 100 || n > 999) { // 判断n是否超出范围(非必须)
            return false;
        }
        int n2 = n * 2, n3 = n * 3; // 计算n * 2和n * 3
        bool status[10] = {false}; // 各数字出现状态
        int count = 0; // 结果共有的数字种类数
        // 算法核心,检查是否出现0,并更新状态表status和种类数count
        auto check = [](int n, bool *status, int *count) {
            int x = 0;
            while(n > 0) {
                x = n % 10; // 取出一位数
                // 出现0,直接返回false
                if(x == 0) {
                    return false;
                }
                // 检查数字是否重复出现
                if(*(status + x) == true) {
                    return false;
                }
                // 更新状态表和种类数
                *(status + x) = true;
                (*count) ++;
                // 去除最后一位
                n /= 10;
            }
            return true;
        };
        // 对三个变量进行检查
        if(!check(n, status, &count) || !check(n2, status, &count) || !check(n3, status, &count)) {
            return false;
        }
        // 判断种类数是否为9(即是否1~9是否都出现)并返回结果
        return count == 9;
    }
};

c 解法, 执行用时: 0 ms, 内存消耗: 5.6 MB, 提交时间: 2023-06-11 08:58:19

bool isFascinating(int n){
    if(n*2 >= 1000 || n*3 >= 1000) return false; //如过n*2 或者 n*3 是个四位数了 那么一定有重复的
    int k = n*1000000 + n*2*1000 + n*3;  //构造迷人数
    int a[10]={0};                    //存储1-9 数字的个数
    while(k){
        a[k%10]++;
        k/=10;
    }
    for(int i = 1 ; i < 10 ; i++)
        if(a[i] != 1) //如果没有出现或者多出现一次就不是迷人数
            return false;
    return true; 
}

python3 解法, 执行用时: 44 ms, 内存消耗: 16.1 MB, 提交时间: 2023-06-11 08:57:55

class Solution(object):
    def isFascinating(self, n):
        s=str(n)+str(2*n)+str(3*n)
        if n<=333 and len(set(s))==9 and "0" not in s:
            return True
        else:
            return False

python3 解法, 执行用时: 48 ms, 内存消耗: 16.1 MB, 提交时间: 2023-06-11 08:57:04

class Solution(object):
    def isFascinating(self, n):
        return n in (192, 219, 273, 327)

python3 解法, 执行用时: 52 ms, 内存消耗: 16.1 MB, 提交时间: 2023-06-11 08:56:45

class Solution(object):
    def isFascinating(self, n):
        return ''.join(sorted(str(n) + str(2 * n) + str(3 * n))) == "123456789"

上一题