日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

动态规划应用--“杨辉三角”最短路径 LeetCode 120

發布時間:2024/7/5 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 动态规划应用--“杨辉三角”最短路径 LeetCode 120 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 1. 問題描述
    • 2. DP算法代碼
    • 3. LeetCode 120 三角形最小路徑和

1. 問題描述

對“楊輝三角"進行一些改造。每個位置的數字可以隨意填寫,經過某個數字只能到達下面一層相鄰的兩個數字。
假設你站在第一層,往下移動,我們把移動到最底層所經過的所有數字之和,定義為路徑的長度。請你編程求出從最高層移動到最底層的最短路徑。

2. DP算法代碼

/*** @description: 改造的楊輝三角,從頂層下來的最小和* @author: michael ming* @date: 2019/7/17 23:03* @modified by: */ #include <cstring> #include <algorithm> #include <iostream>using namespace std; const int high = 5; int YHTriangle[high][high] = {{5},{7,8},{2,1,4},{4,2,6,1},{2,7,3,4,5}};void shortestPath() {int states[high][high];//存放路徑距離(存較小的) // memset(states,65535,high*high*sizeof(int));states[0][0] = YHTriangle[0][0];//第一個點的距離int i, j;for(i = 1; i < high; ++i)//動態規劃{for(j = 0; j <= i; ++j){if(j == 0)//在兩邊,上一個狀態沒得選,只有一個states[i][j] = states[i-1][j]+YHTriangle[i][j];else if(j == i)//在兩邊,上一個狀態沒得選,只有一個states[i][j] = states[i-1][j-1]+YHTriangle[i][j];else//在中間,上一個狀態有兩個,選路徑短的states[i][j] = min(states[i-1][j],states[i-1][j-1])+YHTriangle[i][j];}}int mins = 65535, idx;for(j = 0; j < high; ++j){if(mins > states[high-1][j]){mins = states[high-1][j];//選出最短的idx = j;//記錄最短的路徑位置}}cout << "最短的路徑是:" << mins << endl;//-----------打印路徑-----------------------cout << "從底向上走過的點的值是:" << endl;cout << YHTriangle[high-1][idx] << " ";for(i = high-1,j = idx; i > 0; --i){if(j == 0)cout << YHTriangle[i-1][j] << " ";else if(j == i){cout << YHTriangle[i-1][j-1] << " ";j--;}else{if(states[i-1][j-1] < states[i-1][j]){cout << YHTriangle[i-1][j-1] << " ";j--;}elsecout << YHTriangle[i-1][j] << " ";}} } int main() {shortestPath();return 0; }


更改數據再測試

3. LeetCode 120 三角形最小路徑和

https://leetcode-cn.com/problems/triangle/

以下解法是O(n)空間復雜度

class Solution { public:int minimumTotal(vector<vector<int>>& triangle) {int n = triangle.size();int states[n];int temp_states[n];states[0] = triangle[0][0];int i, j, k, minsum = INT_MAX;for (i = 1; i < n; i++){for(j = 0; j < i+1; j++){if(j == 0)temp_states[0] = states[0] + triangle[i][j];else if(j == i)temp_states[j] = states[j-1] + triangle[i][j];elsetemp_states[j] = min(states[j-1], states[j]) + triangle[i][j];}for(k = 0; k < i+1; k++)states[k] = temp_states[k];//更新states}for(j = 0; j < n; j++)//求最小的值{if(states[j] < minsum)minsum = states[j];}return minsum;} };

總結

以上是生活随笔為你收集整理的动态规划应用--“杨辉三角”最短路径 LeetCode 120的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。