mirror of
https://gitee.com/coder-xiaomo/leetcode-problemset
synced 2025-01-10 18:48:13 +08:00
80 lines
4.0 KiB
HTML
80 lines
4.0 KiB
HTML
<p>游戏中存在两种角色:</p>
|
||
|
||
<ul>
|
||
<li><strong>好人</strong>:该角色只说真话。</li>
|
||
<li><strong>坏人</strong>:该角色可能说真话,也可能说假话。</li>
|
||
</ul>
|
||
|
||
<p>给你一个下标从 <strong>0</strong> 开始的二维整数数组 <code>statements</code> ,大小为 <code>n x n</code> ,表示 <code>n</code> 个玩家对彼此角色的陈述。具体来说,<code>statements[i][j]</code> 可以是下述值之一:</p>
|
||
|
||
<ul>
|
||
<li><code>0</code> 表示 <code>i</code> 的陈述认为 <code>j</code> 是 <strong>坏人</strong> 。</li>
|
||
<li><code>1</code> 表示 <code>i</code> 的陈述认为 <code>j</code> 是 <strong>好人</strong> 。</li>
|
||
<li><code>2</code> 表示 <code>i</code> 没有对 <code>j</code> 作出陈述。</li>
|
||
</ul>
|
||
|
||
<p>另外,玩家不会对自己进行陈述。形式上,对所有 <code>0 <= i < n</code> ,都有 <code>statements[i][i] = 2</code> 。</p>
|
||
|
||
<p>根据这 <code>n</code> 个玩家的陈述,返回可以认为是 <strong>好人</strong> 的 <strong>最大</strong> 数目。</p>
|
||
|
||
<p> </p>
|
||
|
||
<p><strong>示例 1:</strong></p>
|
||
<img alt="" src="https://assets.leetcode.com/uploads/2022/01/15/logic1.jpg" style="width: 600px; height: 262px;">
|
||
<pre><strong>输入:</strong>statements = [[2,1,2],[1,2,2],[2,0,2]]
|
||
<strong>输出:</strong>2
|
||
<strong>解释:</strong>每个人都做一条陈述。
|
||
- 0 认为 1 是好人。
|
||
- 1 认为 0 是好人。
|
||
- 2 认为 1 是坏人。
|
||
以 2 为突破点。
|
||
- 假设 2 是一个好人:
|
||
- 基于 2 的陈述,1 是坏人。
|
||
- 那么可以确认 1 是坏人,2 是好人。
|
||
- 基于 1 的陈述,由于 1 是坏人,那么他在陈述时可能:
|
||
- 说真话。在这种情况下会出现矛盾,所以假设无效。
|
||
- 说假话。在这种情况下,0 也是坏人并且在陈述时说假话。
|
||
- <strong>在认为 2 是好人的情况下,这组玩家中只有一个好人。</strong>
|
||
- 假设 2 是一个坏人:
|
||
- 基于 2 的陈述,由于 2 是坏人,那么他在陈述时可能:
|
||
- 说真话。在这种情况下,0 和 1 都是坏人。
|
||
- <strong>在认为 2 是坏人但说真话的情况下,这组玩家中没有一个好人。</strong>
|
||
- 说假话。在这种情况下,1 是好人。
|
||
- 由于 1 是好人,0 也是好人。
|
||
- <strong>在认为 2 是坏人且说假话的情况下,这组玩家中有两个好人。</strong>
|
||
在最佳情况下,至多有两个好人,所以返回 2 。
|
||
注意,能得到此结论的方法不止一种。
|
||
</pre>
|
||
|
||
<p><strong>示例 2:</strong></p>
|
||
<img alt="" src="https://assets.leetcode.com/uploads/2022/01/15/logic2.jpg" style="width: 600px; height: 262px;">
|
||
<pre><strong>输入:</strong>statements = [[2,0],[0,2]]
|
||
<strong>输出:</strong>1
|
||
<strong>解释:</strong>每个人都做一条陈述。
|
||
- 0 认为 1 是坏人。
|
||
- 1 认为 0 是坏人。
|
||
以 0 为突破点。
|
||
- 假设 0 是一个好人:
|
||
- 基于与 0 的陈述,1 是坏人并说假话。
|
||
- <strong>在认为 0 是好人的情况下,这组玩家中只有一个好人。</strong>
|
||
- 假设 0 是一个坏人:
|
||
- 基于 0 的陈述,由于 0 是坏人,那么他在陈述时可能:
|
||
- 说真话。在这种情况下,0 和 1 都是坏人。
|
||
- <strong>在认为 0 是坏人但说真话的情况下,这组玩家中没有一个好人。</strong>
|
||
- 说假话。在这种情况下,1 是好人。
|
||
- <strong>在认为 0 是坏人且说假话的情况下,这组玩家中只有一个好人。</strong>
|
||
在最佳情况下,至多有一个好人,所以返回 1 。
|
||
注意,能得到此结论的方法不止一种。
|
||
</pre>
|
||
|
||
<p> </p>
|
||
|
||
<p><strong>提示:</strong></p>
|
||
|
||
<ul>
|
||
<li><code>n == statements.length == statements[i].length</code></li>
|
||
<li><code>2 <= n <= 15</code></li>
|
||
<li><code>statements[i][j]</code> 的值为 <code>0</code>、<code>1</code> 或 <code>2</code></li>
|
||
<li><code>statements[i][i] == 2</code></li>
|
||
</ul>
|