[LeetCode 1138]字母板上的路径

文章描述了一个LeetCode上的编程问题,要求在特定的字母板上找到从(0,0)出发到达目标单词的路径。解决方案涉及对字母板的特殊布局的理解,以及如何避免在z位置产生无效路径。通过调整移动顺序,确保向左在向下之前,向上在向右之前,从而得到正确路径。

题目描述

题目链接:[LeetCode 1138]字母板上的路径
我们从一块字母板上的位置 (0, 0) 出发,该坐标对应的字符为 board[0][0]。

在本题里,字母板为board = [“abcde”, “fghij”, “klmno”, “pqrst”, “uvwxy”, “z”],如下所示。

在这里插入图片描述

示例1

输入:target = “leet”
输出:“DDR!UURRR!!DDD!”

示例2

输入:target = “code”
输出:“RR!DDRR!UUL!R!”

提示:
1 <= target.length <= 100
target 仅含有小写英文字母。

思路分析

很简单的题目,主要是z的判别比较恶心,第一想法是判断当前点是否在z这个地方,如果在z的话,需要先移动到u的位置,再移动到所要去的位置(因为z的右边是不能走的)

后面稍微细想了一下,发现只要调整变换顺序就可以解决了,如果我们把向上判断放在向右之前,那么路径肯定是先向上走再向右,这样可以避免在z点先右后上的错误路径

同理,向左判断必须放在向下之前,例如从v到z,必须先向左走再向下,如果先向下在向左,就会到达不可达的区域

代码

class Solution {
public:
    string solve(int a, int b, int c, int d) {
        string res;
        //向左在向下之前,向上在向右之前
        while(b > d) res += 'L', b--;
        while(a < c) res += 'D', a++;
        while(a > c) res += 'U', a--;
        while(b < d) res += 'R', b++;

        res += '!';
        return res;
    }
    string alphabetBoardPath(string target) {
        string res;
        int x = 0, y = 0;
        for (int i = 0; i < target.size(); i++) {
            int t = target[i] - 'a', p = t / 5, q = t % 5;
            res += solve(x, y, p, q);
            x = p, y = q;
        }

        return res;
    }
};
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值