2026/4/12 leetcode 1320

好 jb 难。不会做。能做到的就是理解清楚这个题目的意思,就是 26 个字母,我们用两根手指输入,单词,最小的移动的距离。我以前可能也是需要用两根手指来进行操作,现在可以实现所谓的盲打,靠的其实是熟能生巧。困难题还是有一些难度呢。记忆化搜索实际上和我们做笔记、写博客、或者就是处理我们遇到过的事件调用我们的记忆差不多。本质上是避免重复计算。重复计算的代价是不可接受的。记忆化数组存的是一个三维数组,感觉太变态了,到三维了。幸亏有豆包,不然怎么写的这么这么细致呢。这里的记忆化数组的定义太操蛋了。三维数组,大小是 27,初始化是二维数组,二维数组的初始化是一维数组,二维数组的大小是 27,一位数组的大小是单词的长度,初始化为 -1 表示没有被处理过。看了一下记忆化搜索其实也不是那么困难,也就是 28 行代码,这就是所谓的困难题吗,感觉也就那样。但是,自己写真的可以写出来吗。做不到就是不知道。非常有道理。这题感觉还是非常不错的。非常有意思的一道题。真希望考试的时候遇到这道题,我必须毫不犹豫地把这道题秒了。

cpp 复制代码
class Solution {
public:
    int minimumDistance(string word) {
        vector<vector<vector<int>>> mem ( 27, vector<vector<int>> ( 27, vector<int> ( word.size(), -1)));
        return dfs( word, 26, 26, 0, mem );
    }
private: 
    int dist ( int a, int b ) {
        if ( a == 26 || b == 26 ) {
            return 0;
        }
        int x1 = a / 6, y1 = a % 6;
        int x2 = b / 6, y2 = b % 6;
        return abs( x1 - x2 ) + abs( y1 - y2 );
    }
    int dfs( string& word, int left, int right, int idx, vector<vector<vector<int>>>& mem ) {
        if ( idx == word.size() ) {
            return 0;
        }
        if ( mem[left][right][idx] != -1 ) {
            return mem[left][right][idx];
        }
        int cur = word[idx] - 'A';
        int op1 = dist( left, cur ) + dfs( word, cur, right, idx + 1, mem );
        int op2 = dist( right, cur ) + dfs( word, left, cur, idx + 1, mem );
        return mem[left][right][idx] = min( op1, op2 ); 
    }
};
相关推荐
wabs66611 小时前
关于贪心算法的一些自我总结【力扣45.跳跃游戏II】【灵感来源:代码随想录】
算法·贪心算法·复盘
2401_8769641311 小时前
【湖北专升本】2026湖北专升本真题PDF+备考资料汇总
数据结构·人工智能·经验分享·深度学习·算法·计算机视觉
嗝o゚12 小时前
CANN GE 算子融合——融合算法与调度策略
算法·昇腾·cann·ge
小江的记录本12 小时前
【JVM虚拟机】垃圾回收GC:垃圾回收算法:标记-清除、标记-复制、标记-整理、分代收集(附《思维导图》+《面试高频考点清单》)
java·jvm·后端·python·算法·安全·面试
Ulyanov14 小时前
用声明式语法重新定义Python桌面UI:QML+PySide6现代开发入门(一)
开发语言·python·算法·ui·系统仿真·雷达电子对抗仿真
数据科学小丫14 小时前
特征工程处理
人工智能·算法·机器学习
秦明月1314 小时前
电芯装配测试线安全回路设计实战
经验分享·其他·职场和发展·创业创新·学习方法
z落落14 小时前
C#参数区别
java·算法·c#
c2385615 小时前
vector(下)
数据结构·算法
z落落15 小时前
C# 冒泡排序+选择排序 + Array.Sort 自定义排序
数据结构·算法