1
0
mirror of https://gitee.com/coder-xiaomo/leetcode-problemset synced 2025-01-11 02:58:13 +08:00
Code Issues Projects Releases Wiki Activity GitHub Gitee
leetcode-problemset/leetcode-cn/problem (Chinese)/为高尔夫比赛砍树 [cut-off-trees-for-golf-event].html

53 lines
2.2 KiB
HTML
Raw Normal View History

2022-03-27 20:46:41 +08:00
<p>你被请来给一个要举办高尔夫比赛的树林砍树。树林由一个 <code>m x n</code> 的矩阵表示, 在这个矩阵中:</p>
<ul>
<li><code>0</code> 表示障碍,无法触碰</li>
<li><code>1</code> 表示地面,可以行走</li>
<li><code>比 1 大的数</code> 表示有树的单元格,可以行走,数值表示树的高度</li>
</ul>
<p>每一步,你都可以向上、下、左、右四个方向之一移动一个单位,如果你站的地方有一棵树,那么你可以决定是否要砍倒它。</p>
<p>你需要按照树的高度从低向高砍掉所有的树,每砍过一颗树,该单元格的值变为 <code>1</code>(即变为地面)。</p>
<p>你将从 <code>(0, 0)</code> 点开始工作,返回你砍完所有树需要走的最小步数。 如果你无法砍完所有的树,返回 <code>-1</code></p>
<p>可以保证的是,没有两棵树的高度是相同的,并且你至少需要砍倒一棵树。</p>
<p> </p>
<p><strong>示例 1</strong></p>
<img alt="" src="https://assets.leetcode.com/uploads/2020/11/26/trees1.jpg" style="width: 242px; height: 242px;" />
<pre>
<strong>输入:</strong>forest = [[1,2,3],[0,0,4],[7,6,5]]
<strong>输出:</strong>6
<strong>解释:</strong>沿着上面的路径,你可以用 6 步,按从最矮到最高的顺序砍掉这些树。</pre>
<p><strong>示例 2</strong></p>
<img alt="" src="https://assets.leetcode.com/uploads/2020/11/26/trees2.jpg" style="width: 242px; height: 242px;" />
<pre>
<strong>输入:</strong>forest = [[1,2,3],[0,0,0],[7,6,5]]
<strong>输出:</strong>-1
<strong>解释:</strong>由于中间一行被障碍阻塞,无法访问最下面一行中的树。
</pre>
<p><strong>示例 3</strong></p>
<pre>
<strong>输入:</strong>forest = [[2,3,4],[0,0,5],[8,7,6]]
<strong>输出:</strong>6
<strong>解释:</strong>可以按与示例 1 相同的路径来砍掉所有的树。
(0,0) 位置的树,可以直接砍去,不用算步数。
</pre>
<p> </p>
<p><strong>提示:</strong></p>
<ul>
<li><code>m == forest.length</code></li>
<li><code>n == forest[i].length</code></li>
<li><code>1 <= m, n <= 50</code></li>
<li><code>0 <= forest[i][j] <= 10<sup>9</sup></code></li>
</ul>