力扣题解3248 矩阵中的蛇(简单)

Problem: 3248. 矩阵中的蛇

文章目录

题目重述

给定一个大小为 ( n x n ) 的矩阵 grid,其中每个单元格的标识由公式 grid[i][j] = (i * n) + j 计算得出。蛇从矩阵的起始位置(单元格 0)开始,并根据给定的命令("UP"、"RIGHT"、"DOWN" 和 "LEFT")进行移动。题目保证在移动过程中蛇始终位于矩阵的边界内。需要返回执行完所有命令后,蛇所停留的最终单元格的位置。

关键词提取

  • 矩阵大小:( n x n )
  • 单元格标识:grid[i][j] = (i * n) + j
  • 起始位置:0
  • 移动命令:"UP", "RIGHT", "DOWN", "LEFT"
  • 返回值:最终单元格的位置

解题思路分析

  1. 二维转一维:通过公式将二维坐标转换为一维索引,简化位置的计算。
  2. 命令解析 :根据命令的不同,更新蛇的位置。
    • 左移:position--
    • 右移:position++
    • 下移:position += n
    • 上移:position -= n
  3. 边界条件:题目保证蛇在移动过程中不会越界,因此可以直接更新位置而无需检查边界。

算法思维模式

该解题思路运用了状态转移的算法思维模式。通过维护一个状态变量(蛇的当前位置),根据输入的命令逐步更新状态,最终得到结果。这种方法适用于动态变化的场景,通过简单的状态更新实现目标。

代码分析

java 复制代码
class Solution {
    public int finalPositionOfSnake(int n, List<String> commands) {
        int position = 0; // 初始化蛇的起始位置为 0

        for (String command : commands) {
            switch (command) {
                case "LEFT":  
                    position--;  
                    break;  
                case "RIGHT":  
                    position++;   
                    break;  
                case "DOWN":  
                    position += n; // 向下移动  
                    break;  
                case "UP":  
                    position -= n; // 向上移动  
                    break;  
            }
        }
    
        return position; 
    }
}
cpp 复制代码
class Solution {  
public:  
    int finalPositionOfSnake(int n, vector<string>& commands) {  
        int position = 0;  

        for (const string& command : commands) { // 遍历命令  
            if (command == "LEFT") {  
                position--; // 左移  
            } else if (command == "RIGHT") {  
                position++; // 右移  
            } else if (command == "DOWN") {  
                position += n; // 向下移动  
            } else if (command == "UP") {  
                position -= n; // 向上移动  
            }  
        }  

        return position; // 返回最终位置  
    }  
};

时间复杂度分析

  • 时间复杂度:O(m),其中 ( m ) 是命令的数量。因为我们需要遍历所有命令并根据命令更新位置,每个命令的处理时间是常数级别的。

空间复杂度分析

  • 空间复杂度 :O(1)。我们只使用了一个额外的变量 position 来存储蛇的当前位置,不依赖于输入的大小,因此空间复杂度是常数级别的。
相关推荐
倒头就睡的小比特4 天前
算法竞赛C++常用的STL
c++·算法
小羊没烦恼!4 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
猎头南楼4 天前
知识社区推荐系统实践:新用户冷启动与长短期兴趣建模的挑战 资深推荐算法工程师
人工智能·深度学习·算法·机器学习
旖旎夜光4 天前
力控面试题 01.01: 判定字符是否唯一(位运算) —— 题解
c++·学习·算法·leetcode·力控
wzdark4 天前
大规模并行计算中的负载均衡算法研究4
算法
Because_of_Her14 天前
并查集-听课笔记
笔记·算法·并查集
码流子4 天前
高速公路安全监测实践:碰撞监测预警+物联网底座,从感知到处置的闭环
大数据·人工智能·物联网·算法·架构
another heaven4 天前
【算法/C++ MD5算法能否逆解码?原理、C++实现与同类哈希算法对比】
c++·算法·哈希算法
wzdark4 天前
从算法设计模式看编程思维的抽象能力4
算法
2601_962218614 天前
万象生鲜系统称重自动多退少补算法解决生鲜非标品痛点
大数据·数据库·人工智能·python·算法