题目:1138. 字母板上的路径 - 力扣(Leetcode)
题目的接口:
class Solution { public: string alphabetBoardPath(string target) { } };
解题思路:
根据题目,我们发现这个字母表格是有规律的,
他是从a b c d e f g h i j k l m n o p q r s t u v w x y z这样排列的,
而且还排成了一个类似表格的形状,这样我们其实可以用坐标来找每个字母,
那我们就不多想,直接用坐标(x, y)定位每个要查找的字母,然后迭代去找。
最后只要小心一下z字母,不要越界就行,因为z字母的右边是没有字母的,如果
直接往右查找,又或者是倒数第二行的字母直接往下查找,再往左找z,这样都会
造成越界访问,所以要先往上、往左查找。
代码:
class Solution { public: //起始坐标会不断变化,所以传引用 void push_c(int x,int y,int& prev_x, int& prev_y,char tag, string&s) { //防止在z时越界访问 //所以我们先向左查找 while(prev_y > y) { prev_y--; s.push_back('L'); } //再向上查找 while(prev_x > x) { prev_x--; s.push_back('U'); } //这样再往下和右就不会越界了 while(prev_x < x) { prev_x++; s.push_back('D'); } while(prev_y < y) { prev_y++; s.push_back('R'); } //找到之后插入'!' s.push_back('!'); } string alphabetBoardPath(string target) { //创建要返回的字符串 string s; //x和y是目标坐标,prev_x和prev_y是起始坐标 int x, y, prev_x = 0, prev_y = 0; //迭代查找 for(int i = 0; i < target.size(); i++) { //计算目标坐标 x = (target[i] - 'a') / 5; y = (target[i] - 'a') % 5; //实现查找函数,迭代查找 push_c(x, y, prev_x, prev_y, target[i], s); } //返回 return s; } };
过啦!!!
写在最后:
以上就是本篇文章的内容了,感谢你的阅读。
如果喜欢本文的话,欢迎点赞和评论,写下你的见解。
如果想和我一起学习编程,不妨点个关注,我们一起学习,一同成长。