Daily Coding Problem: Problem #672

/**
 * This problem was asked by Google.
You are given an array of arrays of integers, where each array corresponds to a row in a triangle of numbers.
For example, [[1], [2, 3], [1, 5, 1]] represents the triangle:
  1
 2 3
1 5 1
We define a path in the triangle to start at the top and go down one row at a time to an adjacent value,
eventually ending with an entry on the bottom row. For example, 1 -> 3 -> 5.
The weight of the path is the sum of the entries.
Write a program that returns the weight of the maximum weight path.
 * */
class Problem_672 {
    fun maxPathWeight(triange: Array<IntArray>): Int {
        val m = triange.size
        val n = triange[0].size
        help(triange, m - 1, n - 1)
        //result save in top left
        return triange[0][0]
    }

    //loop for bottom up
    private fun help(triange: Array<IntArray>, m: Int, n: Int) {
        for (i in m-1 downTo 0) {
            for (j in 0..i) {
                if (triange[i + 1][j] > triange[i + 1][j + 1]) {
                    triange[i][j] += triange[i + 1][j]
                } else {
                    triange[i][j] += triange[i + 1][j + 1]
                }
            }
        }
    }
}

 

posted @ 2020-10-03 15:19  johnny_zhao  阅读(74)  评论(0编辑  收藏  举报