[leetCode 丶 20241121] 3248. 矩阵中的蛇

原题: 3248.矩阵中的蛇


描述:

大小为 n x n 的矩阵 grid 中有一条蛇。蛇可以朝 四个可能的方向 移动。矩阵中的每个单元格都使用位置进行标识: grid[i][j] = (i * n) + j

蛇从单元格 0 开始,并遵循一系列命令移动。

给你一个整数 n 表示 grid 的大小,另给你一个字符串数组 commands,其中包括 "UP""RIGHT""DOWN""LEFT"。题目测评数据保证蛇在整个移动过程中将始终位于 grid 边界内。

返回执行 commands 后蛇所停留的最终单元格的位置。

示例 1

输入: n = 2, commands = ["RIGHT","DOWN"]
输出: 3
解释:

示例 2

输入: n = 3, commands = ["DOWN","RIGHT","UP"]
输出: 1
解释:

提示

  • 2 <= n <= 10
  • 1 <= commands.length <= 100
  • commands 仅由 "UP"、"RIGHT"、"DOWN" 和 "LEFT" 组成。
  • 生成的测评数据确保蛇不会移动到矩阵的边界外。

个人版答案

执行用时: 2 ms 执行内存消耗: 43.3 M

class Solution {
    public int finalPositionOfSnake(int n, List<String> commands) {
        int i = 0, j = 0;
        for(String cmd: commands){
            switch(cmd){
                case "UP":
                    i--;
                    break;
                case "DOWN":
                    i++;
                    break;
                case "LEFT":
                    j--;
                    break;
                case "RIGHT":
                    j++;
                    break;
                default:
                    break;                                                                              
            }
        }
        return (i*n)+j;
    }
}

优秀解法

执行耗时: 1 ms

class Solution {
    public int finalPositionOfSnake(int n, List<String> commands) {
        int ans = 0;
        for (String c : commands) {
            if (c.charAt(0) == 'U') {
                ans -= n;
            } else if (c.charAt(0) == 'D') {
                ans += n;
            } else if (c.charAt(0) == 'L') {
                --ans;
            } else {
                ++ans;
            }
        }
        return ans;
    }
}

个人解题思路与优秀答案解析

题目分析及个人版思路

  1. ??? 不会出界? 哈哈哈哈哈 看 : grid[i][j] = (i * n) + j... hhh 秒了
  2. n = 2

00 01
10 11

  1. 发现了么? i,j 移动. 向上移动 i-1, 向下 i + 1. 左右 j 同理
  2. 哔哔完毕, 看代码.

进阶版思路
虽然快, 但是不如我的好理解啊~