• 记一次leetcode翻车之路---给自己做个记录


    ​ 这是第一次刷LeetCode,随机一道题,514自由之路(翻车之路):

    电子游戏“辐射4”中,任务“通向自由”要求玩家到达名为“Freedom Trail Ring”的金属表盘,并使用表盘拼写特定关键词才能开门。 给定一个字符串 ring,表示刻在外环上的编码;给定另一个字符串 key,表示需要拼写的关键词。您需要算出能够拼写关键词中所 有字符的最少步数。

    最初,ring 的第一个字符与12:00方向对齐。您需要顺时针或逆时针旋转 ring 以使 key 的一个字符在 12:00 方向对齐,然后按下中心按钮,以此逐个拼写完 key 中的所有字符。

    旋转 ring 拼出 key 字符 key[i] 的阶段中:您可以将 ring 顺时针或逆时针旋转一个位置,计为1步。旋转的最终目的是将字符串 ring 的一个字符与 12:00 方向对齐,并且这个字符必须等于字符 key[i] 。
    如果字符 key[i] 已经对齐到12:00方向,您需要按下中心按钮进行拼写,这也将算作 1 步。按完之后,您可以开始拼写 key 的下一个字符(下一阶段), 直至完成所有拼写。
    示例:

    ![image-20210928225408159](/Users/liu/Library/Application Support/typora-user-images/image-20210928225408159.png)

    输入: ring = "godding", key = "gd"
    输出: 4
    解释:
    对于 key 的第一个字符 'g',已经在正确的位置, 我们只需要1步来拼写这个字符。
    对于 key 的第二个字符 'd',我们需要逆时针旋转 ring "godding" 2步使它变成 "ddinggo"。
    当然, 我们还需要1步进行拼写。
    因此最终的输出是 4

    翻车代码:

    def findRotateSteps(self, ring: str, key: str) -> int:
        countlist=[]
        len_ring=len(ring)
        v_len = len_ring / 2
        for i in key:
            indexlist = []
            for j in range(len_ring-1):
                if i==ring[j]:
                    indexlist.append(j)
            if len(indexlist)>0:
                if len(indexlist)==1:
                    count=indexlist[0]+1
                else:
                   if float(indexlist[-1]) < v_len:
                        count=indexlist[-1]
                   else:
                        count=indexlist[-1]-len_ring
                countlist.append(count)
        s_count=0
        # print(countlist)
        for f in countlist:
            s_count=s_count+f
        return s_count
    

    开始想的有些简单,以为就是一个简单的算法题,就顺手写个遍历,暴力破解,结果未通过,后来仔细品了一下题,是个动态规划的题,不是每次最短最终距离就是最少的步骤,需要记录上一个字符的位置最终来计算最短距离,尝试几次未能解决,以我浅显的知识可能目前实现不了,果断放弃,做个记录,改日再战

  • 相关阅读:
    say goodbye to Heroku All In One
    Next.js Conf Ticket All In One
    如何在 macOS 上使用 iMovie 进行视频剪辑教程 All In One
    河流水质等级 All In One
    Leetcdoe 2037. 使每位学生都有座位的最少移动次数(可以,一次过)
    Leetcode 2190. 数组中紧跟 key 之后出现最频繁的数字(可以,一次过)
    Leetcode 2164. 对奇偶下标分别排序(可以,一次过)
    C++ std::function的用法
    利用torch.nn实现前馈神经网络解决 回归 任务
    pytorch 中 torch.nn.Linear() 详解
  • 原文地址:https://www.cnblogs.com/moyudi/p/15350612.html
Copyright © 2020-2023  润新知