84_leetcode_triangle

来源:互联网 发布:指数补偿算法 编辑:程序博客网 时间:2024/04/25 21:49

Given a triangle, find the minimum path sum from top to bottom. Each step you may move to adjacent numbers on the row below.

For example, given the following triangle

[     [2],    [3,4],   [6,5,7],  [4,1,8,3]]

The minimum path sum from top to bottom is 11 (i.e., 2 + 3 + 5 + 1 = 11).

1:注意特殊情况;2:设置两个数组,3:在计算当前行的最小值的时候,分为第一个元素,最后一个元素和中间元素两种情况;4:最后遍历数组求得最小值

    <p class="p1">    <span class="s1">int</span> minimumTotal(<span class="s2">vector</span><<span class="s2">vector</span><<span class="s1">int</span>> > &triangle)</p><p class="p1">    {</p><p class="p1">        <span class="s1">if</span>(triangle.<span class="s3">size</span>() == <span class="s4">0</span> || triangle[<span class="s4">0</span>].<span class="s3">size</span>() == <span class="s4">0</span>)</p><p class="p1">        {</p><p class="p1">            <span class="s1">return</span> <span class="s4">0</span>;</p><p class="p1">        }</p><p class="p2">        </p><p class="p1">        <span class="s1">int</span> rows = (<span class="s1">int</span>)triangle.<span class="s3">size</span>();</p><p class="p1">        <span class="s1">unsigned</span> <span class="s1">long</span>  columns = (<span class="s1">int</span>)triangle[<span class="s3">rows</span>-<span class="s4">1</span>].<span class="s3">size</span>();</p><p class="p1">        <span class="s2">vector</span><<span class="s1">int</span>> result(columns, <span class="s4">0</span>);</p><p class="p1">        <span class="s2">vector</span><<span class="s1">int</span>> temp(columns, <span class="s4">0</span>);</p><p class="p2">        </p><p class="p1">        <span class="s1">for</span>(<span class="s1">int</span> i = <span class="s4">0</span>; i < rows; i++)</p><p class="p1">        {</p><p class="p1">            <span class="s1">int</span> columns = (<span class="s1">int</span>)triangle[<span class="s3">i</span>].<span class="s3">size</span>();</p><p class="p1">            <span class="s1">for</span>(<span class="s1">int</span> j = <span class="s4">0</span>; j < columns; j++)</p><p class="p1">            {</p><p class="p1">                <span class="s1">if</span>(i == <span class="s4">0</span>)</p><p class="p1">                {</p><p class="p1">                    result[<span class="s3">j</span>] = triangle[<span class="s3">i</span>][<span class="s3">j</span>];</p><p class="p1">                }</p><p class="p1">                <span class="s1">else</span></p><p class="p1">                {</p><p class="p1">                    <span class="s1">if</span>(j == <span class="s4">0</span>)</p><p class="p1">                    {</p><p class="p1">                        result[<span class="s3">j</span>] = temp[<span class="s3">j</span>] + triangle[<span class="s3">i</span>][<span class="s3">j</span>];</p><p class="p1">                    }</p><p class="p1">                    <span class="s1">else</span> <span class="s1">if</span>(j == columns - <span class="s4">1</span>)</p><p class="p1">                    {</p><p class="p1">                        result[<span class="s3">j</span>] = temp[<span class="s3">j</span>-<span class="s4">1</span>] + triangle[<span class="s3">i</span>][<span class="s3">j</span>];</p><p class="p1">                    }</p><p class="p1">                    <span class="s1">else</span></p><p class="p1">                    {</p><p class="p1">                        result[<span class="s3">j</span>] = triangle[<span class="s3">i</span>][<span class="s3">j</span>] + (temp[<span class="s3">j</span>-<span class="s4">1</span>] < temp[<span class="s3">j</span>] ? temp[<span class="s3">j</span>-<span class="s4">1</span>] : temp[<span class="s3">j</span>]);</p><p class="p1">                    }</p><p class="p1">                }</p><p class="p1">            }</p><p class="p1">            temp = result;</p><p class="p1">        }</p><p class="p2">        </p><p class="p1">        <span class="s1">int</span> minNumber = result[<span class="s4">0</span>];</p><p class="p1">        <span class="s1">for</span>(<span class="s1">int</span> i = <span class="s4">0</span>; i < (<span class="s1">int</span>)result.<span class="s3">size</span>(); i++)</p><p class="p1">        {</p><p class="p1">            <span class="s1">if</span>(result[<span class="s3">i</span>] < minNumber)</p><p class="p1">            {</p><p class="p1">                minNumber = result[<span class="s3">i</span>];</p><p class="p1">            }</p><p class="p1">        }</p><p class="p1">        <span class="s1">return</span> minNumber;</p><p class="p1">    }</p>

0 0