LeetCode 64 Minimum Path Sum--In C++
2016-05-25 16:23
405 查看
思路:
用动态规划的话,速度是最快的。
状态迁移方程:mat[i][j] = (mat[i][j + 1]<mat[i + 1][j] ? mat[i][j + 1] : mat[i + 1][j]) + grid[i][j];
即要找到一个格子的下边和右边较小的值,在加上grid中给他的值,作为mat中这个位置的最终值。
用动态规划的话,速度是最快的。
状态迁移方程:mat[i][j] = (mat[i][j + 1]<mat[i + 1][j] ? mat[i][j + 1] : mat[i + 1][j]) + grid[i][j];
即要找到一个格子的下边和右边较小的值,在加上grid中给他的值,作为mat中这个位置的最终值。
int minPathSum(vector<vector<int>>& grid) { int m = grid.size(); if (m == 0){ return 0; } int n = grid[0].size(); int** mat = new int*[m](); for (int i = 0; i < m; i++){ mat[i] = new int (); } mat[m - 1][n - 1] = grid[m-1][n-1]; for (int i = m - 1; i >= 0; i--){ for (int j = n - 1; j >= 0; j--){ if (i == m - 1 && j == n - 1){ continue; } if (j == n - 1){ mat[i][j] = mat[i + 1][j] + grid[i][j];//最底最右的边,等于自身值加前空的值 } else if (i == m - 1){ mat[i][j] = mat[i][j + 1] + grid[i][j]; } else{ mat[i][j] = (mat[i][j + 1]<mat[i + 1][j] ? mat[i][j + 1] : mat[i + 1][j]) + grid[i][j]; } } } int result = mat[0][0]; for (int i = 0; i < m; i++){ delete[] mat[i]; } delete[] mat; return result; }
相关文章推荐
- 注释风格转换(从C语言注释风格转换到C++注释风格)
- c++作业6
- LeetCode 345: Reverse Vowels of a String
- 杨辉三角
- C++三道笔试题
- C++面向对象实验(六)(完结)
- c语言文件读写(fread,fprintf)
- LeetCode 329: Longest Increasing Path in a Matrix
- 注释转换(C---->C++)
- C++作业-6
- LeetCode 328: Odd Even Linked List
- C++实验6-矩阵求和
- 第六次C++实验
- c++第6次上机实验
- 多模式匹配AC算法(更正)
- 第六次C++作业
- C++ ADO MFC 连接数据库
- vc2008 occcont.cpp, Line 926 f:/dd/vctools/vc7libs/ship/
- C++笔记--指针数组和结构
- c++静态成员变量问题