leecode.1138.字母板上的路径

题目

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

在本题里,字母板为board = [“abcde”, “fghij”, “klmno”, “pqrst”, “uvwxy”, “z”],如下所示。
在这里插入图片描述

思路

  • 首先这道题每个字母在板上的位置是固定的。
  • 所以就变成了两个固定位置之间的偏移。

注意的地方

  • 这道题很坑的地方在于,z的位置。对于从z到其他字母,应该是按照先上再右的顺序;从其他字母到z的顺序,应该是按照先左再下的顺序。

代码


class Solution {
public:
    pair<int, int> getPos(char c){
        int n = c - 'a';
        return {n / 5, n % 5};
    }
    
    string alphabetBoardPath(string target) {
        string ans = "";
        char st = 'a';
        pair<int, int> stPos = getPos(st);
        int nx = stPos.first, ny = stPos.second;
        // cout<<nx<<" "<<ny<<endl;
        for(int i = 0;i < target.size();i++){
            pair<int, int> edPos = getPos(target[i]);
            while(nx > edPos.first) ans += 'U',nx--;
            while(ny < edPos.second) ans += 'R',ny++;
            while(ny > edPos.second) ans += 'L',ny--;
            while(nx < edPos.first) ans += 'D',nx++;
            ans += '!';
            
        }            
        return ans;
    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值