leetcode第1575题
题目描述
分析
这里还是记录每一个城市能够到达j的路径,问题是如何记录城市、限定条件是什么
假设i,k,j是n个城市中的三个,并且有足够多的油,那么从i 到 j 可以直接从i-> j,也可以选择i->k->j,可是k->j中间可能也有城市,那么就需要找k->j之间的中转城市,再用那个找到的城市递归累加
所以:i->j = i->j之间所有中转城市能够到达j的所有路径数总和
可是必须要有足够的油才能去中转城市,所以能不能做中转城市就是看i有没有足够的油
记忆化搜索
构造DFS递归,结束条件是:剩下的油为0,或者剩下的油已经不足以到任何城市了。
用二维数组cache[i][fuel]记录,表示从以城市i为起点,剩余fuel油量的情况下,到达j的路径数
由于两个城市之间耗油量为:abs(locations[i]-locations[j]),所以只要
fuel>abs(locations[i]-locations[x]),这个城市就可以作为中转城市,那么:
cache[i][fuel]+=cache[i][][fuel-abs(locations[i]-locations[x])]
class Solution {
public int countRoutes(int[] locations, int start, int finish, int fuel) {
int[]