2596. 检查骑士巡视方案(Java)

这篇具有很好参考价值的文章主要介绍了2596. 检查骑士巡视方案(Java)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

骑士在一张 n x n 的棋盘上巡视。在有效的巡视方案中,骑士会从棋盘的 左上角出发,并且访问棋盘上的每个格子恰好一次 。
给你一个 n x n 的整数矩阵 grid ,由范围 [0, n * n - 1] 内的不同整数组成,其中 grid[row][col] 表示单元格 (row, col) 是骑士访问的第 grid[row][col] 个单元格。骑士的行动是从下标 0 开始的。
如果 grid 表示了骑士的有效巡视方案,返回 true;否则返回 false。
注意,骑士行动时可以垂直移动两个格子且水平移动一个格子,或水平移动两个格子且垂直移动一个格子。下图展示了骑士从某个格子出发可能的八种行动路线。
2596. 检查骑士巡视方案(Java),力扣,leetcode,java

示例 1:
2596. 检查骑士巡视方案(Java),力扣,leetcode,java
输入:grid = [[0,11,16,5,20],[17,4,19,10,15],[12,1,8,21,6],[3,18,23,14,9],[24,13,2,7,22]]输出:true解释:grid 如上图所示,可以证明这是一个有效的巡视方案。

示例 2:
2596. 检查骑士巡视方案(Java),力扣,leetcode,java
输入:grid = [[0,3,6],[5,8,1],[2,7,4]]
输出:false
解释:grid 如上图所示,考虑到骑士第 7 次行动后的位置,第 8 次行动是无效的。文章来源地址https://www.toymoban.com/news/detail-709597.html

class Solution {
    public boolean checkValidGrid(int[][] grid) {
        int row = 0, col = 0;
        if (grid[0][0] != 0)
            return false;
        //左上角 grid[0][0] 为 0,骑士在每一步有八种行动路线,一步步验证行动的有效性
        for (int i = 1; i < Math.pow(grid.length, 2); i++) {
            if (row - 2 >= 0 && col - 1 >= 0 && grid[row-2][col-1] == i) {
                row -= 2;
                col -= 1;
            }
            else if (row - 2 >= 0 && col + 1 < grid.length && grid[row-2][col+1] == i) {
                row -= 2;
                col += 1;
            }
            else if (row - 1 >= 0 && col - 2 >= 0 && grid[row-1][col-2] == i) {
                row -= 1;
                col -= 2;
            }
            else if (row - 1 >= 0 && col + 2 < grid.length && grid[row-1][col+2] == i) {
                row -= 1;
                col += 2;
            }
            else if (row + 1 < grid.length && col - 2 >= 0 && grid[row+1][col-2] == i) {
                row += 1;
                col -= 2;
            }
            else if (row + 1 < grid.length && col + 2 < grid.length && grid[row+1][col+2] == i) {
                row += 1;
                col += 2;
            }
            else if (row + 2 < grid.length && col - 1 >= 0 && grid[row+2][col-1] == i) {
                row += 2;
                col -= 1;
            }
            else if (row + 2 < grid.length && col + 1 < grid.length && grid[row+2][col+1] == i) {
                row += 2;
                col += 1;
            } else
                return false;
        }
        return true;
    }
}

到了这里,关于2596. 检查骑士巡视方案(Java)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java计算机毕业设计中期检查写作参考

     博主介绍 : ✌ 全网粉丝30W+,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ 👇🏻 精彩专栏 推荐订阅 👇🏻 不然下次找不到哟  java项目精品实战案例《100套》

    2024年02月03日
    浏览(70)
  • Java检查值是否存在于数组中的3种方法

    在 Java 中,有许多方法可以检查此数组中是否存在特定元素。 时间复杂度:O(N) 辅助空间:O(1) for (int element : arr) {     if (element == toCheckValue) {         return true;     } } 示例代码: 运行结果: Array: [5, 1, 1, 9, 7, 2, 6, 10] Is 7 present in the array: true Java 中的 List contains() 方法用

    2024年02月08日
    浏览(45)
  • 【模拟】力扣38(Java)

    题目

    2024年01月24日
    浏览(30)
  • 水壶问题(力扣)数学 JAVA

    有两个水壶,容量分别为 jug1Capacity 和 jug2Capacity 升。水的供应是无限的。确定是否有可能使用这两个壶准确得到 targetCapacity 升。 如果可以得到 targetCapacity 升水,最后请用以上水壶中的一或两个来盛放取得的 targetCapacity 升水。 你可以: 装满任意一个水壶 清空任意一个水壶

    2024年02月13日
    浏览(30)
  • 670. 最大交换 --力扣 --JAVA

    给定一个非负整数,你 至多 可以交换一次数字中的任意两位。返回你能得到的最大值。 将数字转换成字符数组便于遍历; 寻找是否存在比当前元素大的元素,取最后匹配到的元素,进行交换并跳出循环;

    2024年01月25日
    浏览(31)
  • 73. 矩阵置零 --力扣 --JAVA

    给定一个  m x n  的矩阵,如果一个元素为  0  ,则将其所在行和列的所有元素都设为  0  。请使用  原地  算法 。 通过二层循环找出元素为0所在的行和列; 设置标志位记录当前行是否存在元素为0的,设置列表存储列为0的列; 在内循环结束后对存在元素为0的行,填充为

    2024年02月06日
    浏览(45)
  • 比较版本号(力扣)思维 JAVA

    给你两个版本号 version1 和 version2 ,请你比较它们。 版本号由一个或多个修订号组成,各修订号由一个 ‘.’ 连接。每个修订号由 多位数字 组成,可能包含 前导零。每个版本号至少包含一个字符。修订号从左到右编号,下标从 0 开始,最左边的修订号下标为 0 ,下一个修订

    2024年02月15日
    浏览(35)
  • 最优除法(力扣)数学 JAVA

    给定一正整数数组 nums,nums 中的相邻整数将进行浮点除法。例如, [2,3,4] - 2 / 3 / 4 。 例如,nums = [2,3,4],我们将求表达式的值 “2/3/4”。 但是,你可以在任意位置添加任意数目的括号,来改变算数的优先级。你需要找出怎么添加括号,以便计算后的表达式的值为最大值。 以

    2024年02月15日
    浏览(36)
  • 矩阵置零(力扣)思维 JAVA

    给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 输入:matrix = [[1,1,1],[1,0,1],[1,1,1]] 输出:[[1,0,1],[0,0,0],[1,0,1]] 输入:matrix = [[0,1,2,0],[3,4,5,2],[1,3,1,5]] 输出:[[0,0,0,0],[0,4,5,0],[0,3,1,0]] 提示: m == matrix.length n == matrix[0].length

    2024年02月15日
    浏览(38)
  • 整数拆分(力扣)动态规划 JAVA

    给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k = 2 ),并使这些整数的乘积最大化。 返回 你可以获得的最大乘积 。 示例 1: 输入: n = 2 输出: 1 解释: 2 = 1 + 1, 1 × 1 = 1。 示例 2: 输入: n = 10 输出: 36 解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36。 提示: 2 = n = 58 里程碑意义 解题思路:

    2024年02月17日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包