题目
字母板上的路径
我们从一块字母板上的位置 (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;
}
};