int minimumTotal(std::vector<std::vector<int>>& triangle, std::size_t row,std::size_t col) { if (row >= triangle.size() || col >= triangle[row].size()) return 0; return triangle[row][col] + std::min<int>(minimumTotal(triangle, row + 1, col), minimumTotal(triangle, row + 1, col + 1)); }
void ArrayQuiz::test120() { cout << "LeetCode 120 Triangle 27.3 Medium" << endl; vector<vector<int>> triangle{{2}, {3, 4}, {6, 5, 7}, {4, 1, 8, 3}}; for_each(triangle.cbegin(), triangle.cend(), [&](vector<int> row) { for_each(row.cbegin(), row.cend(), [&](int i) { cout << i << " "; }); cout << endl; }); cout << "Triangle sum = " << minimumTotal(triangle) << endl; }
int main() { int row = 3; int **triangle = (int **)calloc(row, sizeof(int *)); int i; for (i = 0; i < row; i++) { triangle[i] = (int *)calloc(row, sizeof(int)); } triangle[0][0] = -1; triangle[1][0] = 2; triangle[1][1] = 3; triangle[2][0] = 1; triangle[2][1] = -1; triangle[2][2] = -3; printf("%d\n", minimumTotal(triangle, row)); return 0; }
void Main() { vector<vector<int>>input = { { -1 }, { 2, 3 }, {1, -1, -3 } }; print(minimumTotal(input)); }
int minimumTotal1(std::vector<std::vector<int>>& triangle) //the version of recursion { return minimumTotal(triangle, 0, 0); }