列表

详情


6361. 对角线上的质数

给你一个下标从 0 开始的二维整数数组 nums

返回位于 nums 至少一条 对角线 上的最大 质数 。如果任一对角线上均不存在质数,返回 0 。

注意:

在上图中,一条对角线是 [1,5,9] ,而另一条对角线是 [3,5,7]

 

示例 1:

输入:nums = [[1,2,3],[5,6,7],[9,10,11]]
输出:11
解释:数字 1、3、6、9 和 11 是所有 "位于至少一条对角线上" 的数字。由于 11 是最大的质数,故返回 11 。

示例 2:

输入:nums = [[1,2,3],[5,17,7],[9,11,10]]
输出:17
解释:数字 1、3、9、10 和 17 是所有满足"位于至少一条对角线上"的数字。由于 17 是最大的质数,故返回 17 。

 

提示:

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
class Solution { public: int diagonalPrime(vector<vector<int>>& nums) { } };

golang 解法, 执行用时: 104 ms, 内存消耗: 8.2 MB, 提交时间: 2023-04-10 09:52:38

func isPrime(n int) bool {
	for i := 2; i*i <= n; i++ {
		if n%i == 0 {
			return false
		}
	}
	return n >= 2 // 1 不是质数
}

func diagonalPrime(nums [][]int) (ans int) {
	for i, row := range nums {
		if x := row[i]; x > ans && isPrime(x) {
			ans = x
		}
		if x := row[len(nums)-1-i]; x > ans && isPrime(x) {
			ans = x
		}
	}
	return
}

java 解法, 执行用时: 0 ms, 内存消耗: 50.2 MB, 提交时间: 2023-04-10 09:52:25

class Solution {
    public int diagonalPrime(int[][] nums) {
        int n = nums.length, ans = 0;
        for (int i = 0; i < n; ++i) {
            int x = nums[i][i];
            if (x > ans && isPrime(x))
                ans = x;
            x = nums[i][n - 1 - i];
            if (x > ans && isPrime(x))
                ans = x;
        }
        return ans;
    }

    private boolean isPrime(int n) {
        for (int i = 2; i * i <= n; ++i)
            if (n % i == 0)
                return false;
        return n >= 2; // 1 不是质数
    }
}

python3 解法, 执行用时: 56 ms, 内存消耗: 26.8 MB, 提交时间: 2023-04-10 09:52:10

def is_prime(n: int) -> bool:
    i = 2
    while i * i <= n:
        if n % i == 0:
            return False
        i += 1
    return n >= 2  # 1 不是质数

class Solution:
    def diagonalPrime(self, nums: List[List[int]]) -> int:
        ans = 0
        for i, row in enumerate(nums):
            for x in row[i], row[-1 - i]:
                if x > ans and is_prime(x):
                    ans = x
        return ans

上一题