LeetCode_每日一题今日份_329.矩阵中的最长递增路径(没懂)

ゞ 浴缸里的玫瑰 2023-03-01 13:29 40阅读 0赞

在这里插入图片描述

在这里插入图片描述

  1. const int dirs[4][2] = {
  2. {
  3. -1, 0}, {
  4. 1, 0}, {
  5. 0, -1}, {
  6. 0, 1}};
  7. int rows, columns; //定义最终返回的最长递增路劲数组的行、列
  8. int longestIncreasingPath(int** matrix, int matrixSize, int* matrixColSize) {
  9. //主
  10. if (matrixSize == 0 || matrixColSize[0] == 0) {
  11. return 0;
  12. }
  13. rows = matrixSize;
  14. columns = matrixColSize[0];
  15. int** memo = (int**)malloc(sizeof(int*) * rows); //分配行空间
  16. for (int i = 0; i < rows; i++) {
  17. memo[i] = (int*)malloc(sizeof(int) * columns); //分配列空间
  18. memset(memo[i], 0, sizeof(int) * columns); //分配最终返回的最长递增路劲数组的空间
  19. }
  20. int ans = 0;
  21. for (int i = 0; i < rows; ++i) {
  22. for (int j = 0; j < columns; ++j) {
  23. ans = fmax(ans, dfs(matrix, i, j, memo)); //比较 求出最长递增路径
  24. }
  25. }
  26. free(memo);
  27. return ans;
  28. }
  29. int dfs(int** matrix, int row, int column, int** memo) {
  30. //每个单元格的递增路径
  31. if (memo[row][column] != 0) {
  32. return memo[row][column];
  33. }
  34. ++memo[row][column];
  35. for (int i = 0; i < 4; ++i) {
  36. int newRow = row + dirs[i][0], newColumn = column + dirs[i][1];
  37. if (newRow >= 0 && newRow < rows && newColumn >= 0 && newColumn < columns && matrix[newRow][newColumn] > matrix[row][column]) {
  38. memo[row][column] = fmax(memo[row][column], dfs(matrix, newRow, newColumn, memo) + 1);
  39. }
  40. }
  41. return memo[row][column];
  42. }

发表评论

表情:
评论列表 (有 0 条评论,40人围观)

还没有评论,来说两句吧...

相关阅读