LeetCode-Python-1138. 字母板上的路径

658 篇文章 23 订阅

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

在本题里,字母板为board = ["abcde", "fghij", "klmno", "pqrst", "uvwxy", "z"].

我们可以按下面的指令规则行动:

  • 如果方格存在,'U' 意味着将我们的位置上移一行;
  • 如果方格存在,'D' 意味着将我们的位置下移一行;
  • 如果方格存在,'L' 意味着将我们的位置左移一列;
  • 如果方格存在,'R' 意味着将我们的位置右移一列;
  • '!' 会把在我们当前位置 (r, c) 的字符 board[r][c] 添加到答案中。

返回指令序列,用最小的行动次数让答案和目标 target 相同。你可以返回任何达成目标的路径。

 

示例 1:

输入:target = "leet"
输出:"DDR!UURRR!!DDD!"

示例 2:

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

 

提示:

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

思路:

先开个哈希表并遍历board,记录每个字母的坐标,

然后对于target里的每个字符,从当前坐标(起始为(0, 0))走到目标坐标(读哈希表得到),

唯一的特殊情况是字母“z”,因为它只能从上一个字母“u”向下走到。

class Solution(object):
    def alphabetBoardPath(self, target):
        """
        :type target: str
        :rtype: str
        """
        board = ["abcde", 
                 "fghij", 
                 "klmno", 
                 "pqrst", 
                 "uvwxy", 
                 "z"]
        
        dic = dict()
        for i in range(len(board)):
            for j in range(len(board[0])):
                dic[board[i][j]] = [i, j]
                if i == 5:
                    break
         
        x0, y0 = 0,0
        res = ""
        for char in target:
            tmp = ""
            des = dic[char]         
            x1, y1 = des[0], des[1]
            if x0 == x1 and y0 == y1:
                res += "!"
                continue
            if x0 < x1:
                tmp += "D" * (x1 - x0)
            elif x0 > x1:
                tmp += "U" * (x0 - x1)
                
            if x1 == 5 and tmp and tmp[-1] == "D": #处理特殊情况
                tmp = tmp[:-1]
                
            if y0 < y1:
                tmp += "R" * (y1 - y0)
            elif y1 < y0:
                tmp += "L" * (y0 - y1)
            x0 = x1
            y0 = y1
            
            if x1 == 5:#处理特殊情况
                tmp += "D"
                
            tmp += "!"
            res += tmp
        return res

 

LeetCode-Editor是一种在线编码工具,它提供了一个用户友好的界面编写和运行代码。在使用LeetCode-Editor时,有时候会出现乱码的问题。 乱码的原因可能是由于编码格式不兼容或者编码错误导致的。在这种情况下,我们可以尝试以下几种解决方法: 1. 检查文件编码格式:首先,我们可以检查所编辑的文件的编码格式。通常来说,常用的编码格式有UTF-8和ASCII等。我们可以将编码格式更改为正确的格式。在LeetCode-Editor中,可以通过界面设置或编辑器设置来更改编码格式。 2. 使用正确的字符集:如果乱码是由于使用了不同的字符集导致的,我们可以尝试更改使用正确的字符集。常见的字符集如Unicode或者UTF-8等。在LeetCode-Editor中,可以在编辑器中选择正确的字符集。 3. 使用合适的编辑器:有时候,乱码问题可能与LeetCode-Editor自身相关。我们可以尝试使用其他编码工具,如Text Editor、Sublime Text或者IDE,看是否能够解决乱码问题。 4. 查找特殊字符:如果乱码问题只出现在某些特殊字符上,我们可以尝试找到并替换这些字符。通过仔细检查代码,我们可以找到导致乱码的特定字符,并进行修正或替换。 总之,解决LeetCode-Editor乱码问题的方法有很多。根据具体情况,我们可以尝试更改文件编码格式、使用正确的字符集、更换编辑器或者查找并替换特殊字符等方法来解决这个问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值