<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          ?LeetCode刷題實(shí)戰(zhàn)174:地下城游戲

          共 2361字,需瀏覽 5分鐘

           ·

          2021-02-04 08:23

          算法的重要性,我就不多說(shuō)了吧,想去大廠,就必須要經(jīng)過(guò)基礎(chǔ)知識(shí)和業(yè)務(wù)邏輯面試+算法面試。所以,為了提高大家的算法能力,這個(gè)公眾號(hào)后續(xù)每天帶大家做一道算法題,題目就從LeetCode上面選 !

          今天和大家聊的問(wèn)題叫做?地下城游戲??,我們先來(lái)看題面:
          https://leetcode-cn.com/problems/dungeon-game/


          Write a function to determine the knight's minimum initial health so that he is able to rescue the princess.


          For example, given the dungeon below, the initial health of the knight must be at least 7 if he follows the optimal path RIGHT-> RIGHT -> DOWN -> DOWN.



          題意


          一些惡魔抓住了公主(P)并將她關(guān)在了地下城的右下角。地下城是由 M x N 個(gè)房間組成的二維網(wǎng)格。我們英勇的騎士(K)最初被安置在左上角的房間里,他必須穿過(guò)地下城并通過(guò)對(duì)抗惡魔來(lái)拯救公主。

          騎士的初始健康點(diǎn)數(shù)為一個(gè)正整數(shù)。如果他的健康點(diǎn)數(shù)在某一時(shí)刻降至 0 或以下,他會(huì)立即死亡。

          有些房間由惡魔守衛(wèi),因此騎士在進(jìn)入這些房間時(shí)會(huì)失去健康點(diǎn)數(shù)(若房間里的值為負(fù)整數(shù),則表示騎士將損失健康點(diǎn)數(shù));其他房間要么是空的(房間里的值為 0),要么包含增加騎士健康點(diǎn)數(shù)的魔法球(若房間里的值為正整數(shù),則表示騎士將增加健康點(diǎn)數(shù))。

          為了盡快到達(dá)公主,騎士決定每次只向右或向下移動(dòng)一步。



          解題

          https://blog.csdn.net/qq_17550379/article/details/86243097

          一看到這個(gè)問(wèn)題首先想到的就是動(dòng)態(tài)規(guī)劃,其次想的就是自頂向下,但是這樣想的話就會(huì)有一個(gè)問(wèn)題,就是我們需要判斷每次到達(dá)一個(gè)房間后,我們的血量不能是負(fù)數(shù),這給我們編寫代碼造成了很大的困難。如果采用自底向上的思路去做的話,那么問(wèn)題就會(huì)變得簡(jiǎn)單很多(而且我覺(jué)得你應(yīng)該做到,拿到這個(gè)問(wèn)題首先想到的就是自底向上,這是一種直覺(jué))。我們只需要取右和下的最小值(我們需要計(jì)算最少的能量),然后減去dungoen[i][j],并且保證到達(dá)當(dāng)前房間后的血量大于等于0就行了


          f(i,j)=max(0,min(f(i+1,j),f(i,j+1))?dungeon[i][j])


          對(duì)于邊界問(wèn)題我們單獨(dú)處理。最后我們只需要取結(jié)果f(0,0)+1即可(根據(jù)題目中的例子)。Python代碼如下:


          class Solution:
          ????def calculateMinimumHP(self, dungeon):
          ????????"""
          ????????:type?dungeon: List[List[int]]
          ????????:rtype: int
          ????????"""
          ????????row, col?= len(dungeon), len(dungeon[0])
          ????????mem = [[0]*col?for?_ in range(row)]

          ????????for?i in range(row-1,-1,-1):
          ????????????for?j?in range(col-1,-1,-1):
          ????????????????if?i == row-1?and?j?== col-1:
          ????????????????????mem[i][j] = max(0, -dungeon[i][j])
          ????????????????elif i == row-1:
          ????????????????????mem[i][j] = max(0, mem[i][j+1] - dungeon[i][j])
          ????????????????elif j?== col-1:
          ????????????????????mem[i][j] = max(0, mem[i+1][j] - dungeon[i][j])
          ????????????????else:
          ????????????????????mem[i][j] = max(0, min(mem[i+1][j], mem[i][j+1]) - dungeon[i][j])
          ????????????????
          ????????return?mem[0][0] + 1



          好了,今天的文章就到這里,如果覺(jué)得有所收獲,請(qǐng)順手點(diǎn)個(gè)在看或者轉(zhuǎn)發(fā)吧,你們的支持是我最大的動(dòng)力 。

          上期推文:

          LeetCode1-160題匯總,希望對(duì)你有點(diǎn)幫助!
          LeetCode刷題實(shí)戰(zhàn)161:相隔為1的編輯距離
          LeetCode刷題實(shí)戰(zhàn)162:尋找峰值
          LeetCode刷題實(shí)戰(zhàn)163:缺失的區(qū)間
          LeetCode刷題實(shí)戰(zhàn)164:最大間距
          LeetCode刷題實(shí)戰(zhàn)165:比較版本號(hào)
          LeetCode刷題實(shí)戰(zhàn)166:分?jǐn)?shù)到小數(shù)
          LeetCode刷題實(shí)戰(zhàn)167:兩數(shù)之和 II - 輸入有序數(shù)組
          LeetCode刷題實(shí)戰(zhàn)168:Excel表列名稱
          LeetCode刷題實(shí)戰(zhàn)169:多數(shù)元素
          LeetCode刷題實(shí)戰(zhàn)170:兩數(shù)之和 III - 數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)
          LeetCode刷題實(shí)戰(zhàn)171:Excel表列序號(hào)
          LeetCode刷題實(shí)戰(zhàn)172:階乘后的零
          LeetCode刷題實(shí)戰(zhàn)173:二叉搜索樹(shù)迭代器


          瀏覽 35
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  草草地址线路①屁屁影院成人 | 人人操人人摸人人 | 操逼操逼操逼操逼操逼操逼操逼操逼 | 国产内射一级毛片农民工 | 国产又爽 又黄 免费观看 |