LeetCode | Dungeon Game
来源:互联网 发布:增量内部收益率的算法 编辑:程序博客网 时间:2024/05/18 15:53
question:
The demons had captured the princess (P) and imprisoned her in the bottom-right corner of a dungeon. The dungeon consists of M x N rooms laid out in a 2D grid. Our valiant knight (K) was initially positioned in the top-left room and must fight his way through the dungeon to rescue the princess.
The knight has an initial health point represented by a positive integer. If at any point his health point drops to 0 or below, he dies immediately.
Some of the rooms are guarded by demons, so the knight loses health (negative integers) upon entering these rooms; other rooms are either empty (0’s) or contain magic orbs that increase the knight’s health (positive integers).
In order to reach the princess as quickly as possible, the knight decides to move only rightward or downward in each step.
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.
-2 (K) -3 3-5 -10 110 30 -5 (P)
explaination:
从尾部向头部遍历 移动到某一点时 对其右边点和下边点 进行判断比较,用各自的minValues减去当前点的dungeon值 并得到较小值为当前节点的minValues值(大于或等于1)
solution:
public int calculateMinimumHP(int[][] dungeon) { int m=dungeon.length; int n=dungeon[0].length; if(m<=0 || n<=0) { return 0; } int [][]minValues=new int[m][n]; if(dungeon[m-1][n-1]<=0) { minValues[m-1][n-1]=Math.abs(dungeon[m-1][n-1])+1; }else{ minValues[m-1][n-1]=1; } for(int i=m-2;i>=0;i--) { minValues[i][n-1]=Math.max(minValues[i+1][n-1]-dungeon[i][n-1],1); } for(int i=n-2;i>=0;i--) { minValues[m-1][i]=Math.max(minValues[m-1][i+1]-dungeon[m-1][i],1); } for(int i=m-2;i>=0;i--) { for(int j=n-2;j>=0;j--) { int tmp1=minValues[i+1][j]-dungeon[i][j]; int tmp2=minValues[i][j+1]-dungeon[i][j]; minValues[i][j]=Math.max(Math.min(tmp1,tmp2),1); } } return minValues[0][0];}
- [leetcode] Dungeon Game
- leetcode 174: Dungeon Game
- [leetcode 174] Dungeon Game
- [leetcode] Dungeon Game
- Leetcode Dungeon Game
- LeetCode Dungeon Game
- LeetCode: Dungeon Game
- [LeetCode] Dungeon Game
- [leetcode] Dungeon Game
- LeetCode Dungeon Game
- [LeetCode]Dungeon Game
- Leetcode OJ Dungeon Game
- Leetcode: Dungeon Game
- leetcode dungeon game
- [leetcode]Dungeon Game
- LeetCode(174) Dungeon Game
- LeetCode 174 Dungeon Game
- LeetCode - Dungeon Game
- Caffe编译遇到protocbuf的问题
- 泛型+反射 实现泛型向数据库插入信息类 并返回插入数据的Id值
- jsoup
- 用jquery判断按钮的disabled属性
- H5+C3+JS实现焦点轮换图
- LeetCode | Dungeon Game
- 蓝牙解析(part11):BLE SM Bonding
- 打包遇到的坑
- 求伯君—— 一个你必须知道的程序员
- iphone获取当前运行进程列表遇到一个问题
- JAVA 后端知识体系
- 索引的选择性
- 深度神经网络结构以及Pre-Training的理解
- HTML响应式