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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

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

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

文章目錄

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

1. 問(wèn)題描述

對(duì)“楊輝三角"進(jìn)行一些改造。每個(gè)位置的數(shù)字可以隨意填寫,經(jīng)過(guò)某個(gè)數(shù)字只能到達(dá)下面一層相鄰的兩個(gè)數(shù)字。
假設(shè)你站在第一層,往下移動(dòng),我們把移動(dòng)到最底層所經(jīng)過(guò)的所有數(shù)字之和,定義為路徑的長(zhǎng)度。請(qǐng)你編程求出從最高層移動(dòng)到最底層的最短路徑。

2. DP算法代碼

/*** @description: 改造的楊輝三角,從頂層下來(lái)的最小和* @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];//第一個(gè)點(diǎn)的距離int i, j;for(i = 1; i < high; ++i)//動(dòng)態(tài)規(guī)劃{for(j = 0; j <= i; ++j){if(j == 0)//在兩邊,上一個(gè)狀態(tài)沒(méi)得選,只有一個(gè)states[i][j] = states[i-1][j]+YHTriangle[i][j];else if(j == i)//在兩邊,上一個(gè)狀態(tài)沒(méi)得選,只有一個(gè)states[i][j] = states[i-1][j-1]+YHTriangle[i][j];else//在中間,上一個(gè)狀態(tài)有兩個(gè),選路徑短的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 << "從底向上走過(guò)的點(diǎn)的值是:" << 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; }


更改數(shù)據(jù)再測(cè)試

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

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

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

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;} };

總結(jié)

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

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。