三角形最小路径
给定一个三角形 triangle ,找出自顶向下的最小路径和。
每一步只能移动到下一行中相邻的结点上。
相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点。
- 三角形数据结构
2
2 3
4 5 6
7 8 9 10
这个问题跟上一篇路径问题类似,求最短路径和
- 每一个节点取可选路径的最小值即可
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51public static void main(String[] args) { int[][] a = {{2},{3,4},{6,5,7},{1,2,3,4}}; int minPathSum = getMinPathSum(a); System.out.println(minPathSum); } public static int getMinPathSum(int[][] a){ if(a.length==1){ return a[0][0]; } int[][] f = new int[a.length][a[a.length-1].length]; //初始化起始值 f[0][0] = a[0][0]; for (int i = 1; i < a.length; i++) { int[] arr = a[i]; for (int j = 0; j < i+1; j++) { //最左边的数据 if(j == 0){ f[i][j] = f[i-1][0] + arr[j]; continue; } //最右边的数据 if(j == i){ f[i][j] = f[i-1][i-1] + arr[j]; continue; } //中间数据 区最小值 int left = arr[j] + f[i-1][j-1]; int right = arr[j] + f[i-1][j]; f[i][j] = Math.min(left,right); } } List<Integer> intList= Arrays.stream(f[a.length-1]).boxed().sorted().collect(Collectors.toList()); return intList.get(0); }
最后
以上就是超级母鸡最近收集整理的关于算法之----三角形最小路径和的全部内容,更多相关算法之----三角形最小路径和内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复