1
0
mirror of https://gitee.com/coder-xiaomo/leetcode-problemset synced 2025-10-19 20:16:48 +08:00
Code Issues Projects Releases Wiki Activity GitHub Gitee
This commit is contained in:
2022-06-29 22:54:34 +08:00
parent 8891b38740
commit 210ba37692
68 changed files with 18640 additions and 11944 deletions

View File

@@ -0,0 +1,41 @@
<p>给你一个整数&nbsp;<code>n</code>&nbsp;。你需要掷一个 6 面的骰子&nbsp;<code>n</code>&nbsp;次。请你在满足以下要求的前提下,求出 <strong>不同</strong>&nbsp;骰子序列的数目:</p>
<ol>
<li>序列中任意 <strong>相邻</strong>&nbsp;数字的 <strong>最大公约数</strong>&nbsp;<code>1</code>&nbsp;</li>
<li>序列中 <strong>相等</strong>&nbsp;的值之间,至少有 <code>2</code>&nbsp;个其他值的数字。正式地,如果第&nbsp;<code>i</code>&nbsp;次掷骰子的值 <strong>等于</strong>&nbsp;&nbsp;<code>j</code>&nbsp;次的值,那么&nbsp;<code>abs(i - j) &gt; 2</code>&nbsp;</li>
</ol>
<p>请你返回不同序列的 <strong>总数目</strong>&nbsp;。由于答案可能很大,请你将答案对&nbsp;<code>10<sup>9</sup> + 7</code>&nbsp;<strong>取余</strong>&nbsp;后返回。</p>
<p>如果两个序列中至少有一个元素不同,那么它们被视为不同的序列。</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre>
<b>输入:</b>n = 4
<b>输出:</b>184
<b>解释:</b>一些可行的序列为 (1, 2, 3, 4) (6, 1, 2, 3) (1, 2, 3, 1) 等等。
一些不可行的序列为 (1, 2, 1, 3) (1, 2, 3, 6) 。
(1, 2, 1, 3) 是不可行的,因为第一个和第三个骰子值相等且 abs(1 - 3) = 2 (下标从 1 开始表示)。
(1, 2, 3, 6) i是不可行的因为 3 和 6 的最大公约数是 3 。
总共有 184 个不同的可行序列,所以我们返回 184 。</pre>
<p><strong>示例 2</strong></p>
<pre>
<b>输入:</b>n = 2
<b>输出:</b>22
<b>解释:</b>一些可行的序列为 (1, 2) (2, 1) (3, 2) 。
一些不可行的序列为 (3, 6) (2, 4) ,因为最大公约数不为 1 。
总共有 22 个不同的可行序列,所以我们返回 22 。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= n &lt;= 10<sup>4</sup></code></li>
</ul>

View File

@@ -0,0 +1,52 @@
<p>给你两个整数 <code>num</code><code>k</code> ,考虑具有以下属性的正整数多重集:</p>
<ul>
<li>每个整数个位数字都是 <code>k</code></li>
<li>所有整数之和是 <code>num</code></li>
</ul>
<p>返回该多重集的最小大小,如果不存在这样的多重集,返回<em> </em><code>-1</code></p>
<p>注意:</p>
<ul>
<li>多重集与集合类似,但多重集可以包含多个同一整数,空多重集的和为 <code>0</code></li>
<li><strong>个位数字</strong> 是数字最右边的数位。</li>
</ul>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre>
<strong>输入:</strong>num = 58, k = 9
<strong>输出:</strong>2
<strong>解释:</strong>
多重集 [9,49] 满足题目条件,和为 58 且每个整数的个位数字是 9 。
另一个满足条件的多重集是 [19,39] 。
可以证明 2 是满足题目条件的多重集的最小长度。
</pre>
<p><strong>示例 2</strong></p>
<pre>
<strong>输入:</strong>num = 37, k = 2
<strong>输出:</strong>-1
<strong>解释:</strong>个位数字为 2 的整数无法相加得到 37 。</pre>
<p><strong>示例 3</strong></p>
<pre>
<strong>输入:</strong>num = 0, k = 7
<strong>输出:</strong>0
<strong>解释:</strong>空多重集的和为 0 。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>0 &lt;= num &lt;= 3000</code></li>
<li><code>0 &lt;= k &lt;= 9</code></li>
</ul>

View File

@@ -0,0 +1,57 @@
<p>存在一棵无向连通树,树中有编号从 <code>0</code><code>n - 1</code><code>n</code> 个节点, 以及 <code>n - 1</code> 条边。</p>
<p>给你一个下标从 <strong>0</strong> 开始的整数数组 <code>nums</code> ,长度为 <code>n</code> ,其中 <code>nums[i]</code> 表示第 <code>i</code> 个节点的值。另给你一个二维整数数组 <code>edges</code> ,长度为 <code>n - 1</code> ,其中 <code>edges[i] = [a<sub>i</sub>, b<sub>i</sub>]</code> 表示树中存在一条位于节点 <code>a<sub>i</sub></code><code>b<sub>i</sub></code> 之间的边。</p>
<p>删除树中两条 <strong>不同</strong> 的边以形成三个连通组件。对于一种删除边方案,定义如下步骤以计算其分数:</p>
<ol>
<li>分别获取三个组件 <strong>每个</strong> 组件中所有节点值的异或值。</li>
<li><strong>最大</strong> 异或值和 <strong>最小</strong> 异或值的 <strong>差值</strong> 就是这一种删除边方案的分数。</li>
</ol>
<ul>
<li>例如,三个组件的节点值分别是:<code>[4,5,7]</code><code>[1,9]</code><code>[3,3,3]</code> 。三个异或值分别是 <code>4 ^ 5 ^ 7 = <em><strong>6</strong></em></code><code>1 ^ 9 = <em><strong>8</strong></em></code><code>3 ^ 3 ^ 3 = <em><strong>3</strong></em></code> 。最大异或值是 <code>8</code> ,最小异或值是 <code>3</code> ,分数是 <code>8 - 3 = 5</code></li>
</ul>
<p>返回在给定树上执行任意删除边方案可能的 <strong>最小</strong> 分数。</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<img alt="" src="https://assets.leetcode.com/uploads/2022/05/03/ex1drawio.png" style="width: 193px; height: 190px;">
<pre><strong>输入:</strong>nums = [1,5,5,4,11], edges = [[0,1],[1,2],[1,3],[3,4]]
<strong>输出:</strong>9
<strong>解释:</strong>上图展示了一种删除边方案。
- 第 1 个组件的节点是 [1,3,4] ,值是 [5,4,11] 。异或值是 5 ^ 4 ^ 11 = 10 。
- 第 2 个组件的节点是 [0] ,值是 [1] 。异或值是 1 = 1 。
- 第 3 个组件的节点是 [2] ,值是 [5] 。异或值是 5 = 5 。
分数是最大异或值和最小异或值的差值10 - 1 = 9 。
可以证明不存在分数比 9 小的删除边方案。
</pre>
<p><strong>示例 2</strong></p>
<img alt="" src="https://assets.leetcode.com/uploads/2022/05/03/ex2drawio.png" style="width: 287px; height: 150px;">
<pre><strong>输入:</strong>nums = [5,5,2,4,4,2], edges = [[0,1],[1,2],[5,2],[4,3],[1,3]]
<strong>输出:</strong>0
<strong>解释:</strong>上图展示了一种删除边方案。
- 第 1 个组件的节点是 [3,4] ,值是 [4,4] 。异或值是 4 ^ 4 = 0 。
- 第 2 个组件的节点是 [1,0] ,值是 [5,5] 。异或值是 5 ^ 5 = 0 。
- 第 3 个组件的节点是 [2,5] ,值是 [2,2] 。异或值是 2 ^ 2 = 0 。
分数是最大异或值和最小异或值的差值0 - 0 = 0 。
无法获得比 0 更小的分数 0 。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>n == nums.length</code></li>
<li><code>3 &lt;= n &lt;= 1000</code></li>
<li><code>1 &lt;= nums[i] &lt;= 10<sup>8</sup></code></li>
<li><code>edges.length == n - 1</code></li>
<li><code>edges[i].length == 2</code></li>
<li><code>0 &lt;= a<sub>i</sub>, b<sub>i</sub> &lt; n</code></li>
<li><code>a<sub>i</sub> != b<sub>i</sub></code></li>
<li><code>edges</code> 表示一棵有效的树</li>
</ul>

View File

@@ -0,0 +1,43 @@
<p>给你一个由英文字母组成的字符串 <code>s</code> ,请你找出并返回 <code>s</code> 中的 <strong>最好</strong> 英文字母。返回的字母必须为大写形式。如果不存在满足条件的字母,则返回一个空字符串。</p>
<p><strong>最好</strong> 英文字母的大写和小写形式必须 <strong></strong><code>s</code> 中出现。</p>
<p>英文字母 <code>b</code> 比另一个英文字母&nbsp;<code>a</code>&nbsp;<strong>更好</strong> 的前提是:英文字母表中,<code>b</code><code>a</code><strong></strong> 出现。</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre>
<strong>输入:</strong>s = "l<em><strong>Ee</strong></em>TcOd<em><strong>E</strong></em>"
<strong>输出:</strong>"E"
<strong>解释:</strong>
字母 'E' 是唯一一个大写和小写形式都出现的字母。</pre>
<p><strong>示例 2</strong></p>
<pre>
<strong>输入:</strong>s = "a<em><strong>rR</strong></em>AzFif"
<strong>输出:</strong>"R"
<strong>解释:</strong>
字母 'R' 是大写和小写形式都出现的最好英文字母。
注意 'A' 和 'F' 的大写和小写形式也都出现了,但是 'R' 比 'F' 和 'A' 更好。
</pre>
<p><strong>示例 3</strong></p>
<pre>
<strong>输入:</strong>s = "AbCdEfGhIjK"
<strong>输出:</strong>""
<strong>解释:</strong>
不存在大写和小写形式都出现的字母。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= s.length &lt;= 1000</code></li>
<li><code>s</code> 由小写和大写英文字母组成</li>
</ul>

View File

@@ -0,0 +1,38 @@
<p>如果一个正方形矩阵满足下述 <strong>全部</strong> 条件,则称之为一个 <strong>X 矩阵</strong> </p>
<ol>
<li>矩阵对角线上的所有元素都 <strong>不是 0</strong></li>
<li>矩阵中所有其他元素都是 <strong>0</strong></li>
</ol>
<p>给你一个大小为 <code>n x n</code> 的二维整数数组 <code>grid</code> ,表示一个正方形矩阵。如果<em> </em><code>grid</code><em> </em>是一个 <strong>X 矩阵 </strong>,返回 <code>true</code> ;否则,返回 <code>false</code></p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<img alt="" src="https://assets.leetcode.com/uploads/2022/05/03/ex1.jpg" style="width: 311px; height: 320px;">
<pre><strong>输入:</strong>grid = [[2,0,0,1],[0,3,1,0],[0,5,2,0],[4,0,0,2]]
<strong>输出:</strong>true
<strong>解释:</strong>矩阵如上图所示。
X 矩阵应该满足:绿色元素(对角线上)都不是 0 ,红色元素都是 0 。
因此grid 是一个 X 矩阵。
</pre>
<p><strong>示例 2</strong></p>
<img alt="" src="https://assets.leetcode.com/uploads/2022/05/03/ex2.jpg" style="width: 238px; height: 246px;">
<pre><strong>输入:</strong>grid = [[5,7,0],[0,3,1],[0,5,0]]
<strong>输出:</strong>false
<strong>解释:</strong>矩阵如上图所示。
X 矩阵应该满足:绿色元素(对角线上)都不是 0 ,红色元素都是 0 。
因此grid 不是一个 X 矩阵。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>n == grid.length == grid[i].length</code></li>
<li><code>3 &lt;= n &lt;= 100</code></li>
<li><code>0 &lt;= grid[i][j] &lt;= 10<sup>5</sup></code></li>
</ul>

View File

@@ -0,0 +1,59 @@
<p>给你两个整数&nbsp;<code>m</code>&nbsp;<code>n</code>&nbsp;,分别表示一块矩形木块的高和宽。同时给你一个二维整数数组&nbsp;<code>prices</code>&nbsp;,其中&nbsp;<code>prices[i] = [h<sub>i</sub>, w<sub>i</sub>, price<sub>i</sub>]</code>&nbsp;表示你可以以&nbsp;<code>price<sub>i</sub></code>&nbsp;元的价格卖一块高为&nbsp;<code>h<sub>i</sub></code>&nbsp;宽为&nbsp;<code>w<sub>i</sub></code>&nbsp;的矩形木块。</p>
<p>每一次操作中,你必须按下述方式之一执行切割操作,以得到两块更小的矩形木块:</p>
<ul>
<li>沿垂直方向按高度 <strong>完全</strong> 切割木块,或</li>
<li>沿水平方向按宽度 <strong>完全</strong> 切割木块</li>
</ul>
<p>在将一块木块切成若干小木块后,你可以根据 <code>prices</code>&nbsp;卖木块。你可以卖多块同样尺寸的木块。你不需要将所有小木块都卖出去。你 <strong>不能</strong>&nbsp;旋转切好后木块的高和宽。</p>
<p>请你返回切割一块大小为<em>&nbsp;</em><code>m x n</code><em> </em>的木块后,能得到的&nbsp;<strong>最多</strong>&nbsp;钱数。</p>
<p>注意你可以切割木块任意次。</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<p><img alt="" src="https://assets.leetcode.com/uploads/2022/04/27/ex1.png" style="width: 239px; height: 150px;" /></p>
<pre>
<b>输入:</b>m = 3, n = 5, prices = [[1,4,2],[2,2,7],[2,1,3]]
<b>输出:</b>19
<b>解释:</b>上图展示了一个可行的方案。包括:
- 2 块 2 x 2 的小木块,售出 2 * 7 = 14 元。
- 1 块 2 x 1 的小木块,售出 1 * 3 = 3 元。
- 1 块 1 x 4 的小木块,售出 1 * 2 = 2 元。
总共售出 14 + 3 + 2 = 19 元。
19 元是最多能得到的钱数。
</pre>
<p><strong>示例 2</strong></p>
<p><img alt="" src="https://assets.leetcode.com/uploads/2022/04/27/ex2new.png" style="width: 250px; height: 175px;" /></p>
<pre>
<b>输入:</b>m = 4, n = 6, prices = [[3,2,10],[1,4,2],[4,1,3]]
<b>输出:</b>32
<b>解释:</b>上图展示了一个可行的方案。包括:
- 3 块 3 x 2 的小木块,售出 3 * 10 = 30 元。
- 1 块 1 x 4 的小木块,售出 1 * 2 = 2 元。
总共售出 30 + 2 = 32 元。
32 元是最多能得到的钱数。
注意我们不能旋转 1 x 4 的木块来得到 4 x 1 的木块。</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= m, n &lt;= 200</code></li>
<li><code>1 &lt;= prices.length &lt;= 2 * 10<sup>4</sup></code></li>
<li><code>prices[i].length == 3</code></li>
<li><code>1 &lt;= h<sub>i</sub> &lt;= m</code></li>
<li><code>1 &lt;= w<sub>i</sub> &lt;= n</code></li>
<li><code>1 &lt;= price<sub>i</sub> &lt;= 10<sup>6</sup></code></li>
<li>所有&nbsp;<code>(h<sub>i</sub>, w<sub>i</sub>)</code> <strong>互不相同</strong>&nbsp;</li>
</ul>

View File

@@ -0,0 +1,40 @@
<p>给你一个二进制字符串&nbsp;<code>s</code>&nbsp;和一个正整数&nbsp;<code>k</code>&nbsp;</p>
<p>请你返回 <code>s</code>&nbsp;<strong>最长</strong>&nbsp;子序列,且该子序列对应的 <strong>二进制</strong>&nbsp;数字小于等于 <code>k</code>&nbsp;</p>
<p>注意:</p>
<ul>
<li>子序列可以有 <strong>前导 0</strong>&nbsp;</li>
<li>空字符串视为&nbsp;<code>0</code>&nbsp;</li>
<li><strong>子序列</strong>&nbsp;是指从一个字符串中删除零个或者多个字符后,不改变顺序得到的剩余字符序列。</li>
</ul>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre><b>输入:</b>s = "1001010", k = 5
<b>输出:</b>5
<b>解释:</b>s 中小于等于 5 的最长子序列是 "00010" ,对应的十进制数字是 2 。
注意 "00100" 和 "00101" 也是可行的最长子序列,十进制分别对应 4 和 5 。
最长子序列的长度为 5 ,所以返回 5 。
</pre>
<p><strong>示例 2</strong></p>
<pre><b>输入:</b>s = "00101001", k = 1
<b>输出:</b>6
<b>解释:</b>"000001" 是 s 中小于等于 1 的最长子序列,对应的十进制数字是 1 。
最长子序列的长度为 6 ,所以返回 6 。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= s.length &lt;= 1000</code></li>
<li><code>s[i]</code> 要么是&nbsp;<code>'0'</code>&nbsp;,要么是&nbsp;<code>'1'</code></li>
<li><code>1 &lt;= k &lt;= 10<sup>9</sup></code></li>
</ul>

View File

@@ -0,0 +1,53 @@
<p>给你两个下标从 <strong>0</strong> 开始的整数数组 <code>nums1</code><code>nums2</code> ,长度都是 <code>n</code></p>
<p>你可以选择两个整数 <code>left</code><code>right</code> ,其中 <code>0 &lt;= left &lt;= right &lt; n</code> ,接着 <strong>交换</strong> 两个子数组 <code>nums1[left...right]</code><code>nums2[left...right]</code></p>
<ul>
<li>例如,设 <code>nums1 = [1,2,3,4,5]</code><code>nums2 = [11,12,13,14,15]</code> ,整数选择 <code>left = 1</code><code>right = 2</code>,那么 <code>nums1</code> 会变为 <code>[1,<strong><em>12</em>,<em>13</em></strong>,4,5]</code><code>nums2</code> 会变为 <code>[11,<em><strong>2,3</strong></em>,14,15]</code></li>
</ul>
<p>你可以选择执行上述操作 <strong>一次</strong> 或不执行任何操作。</p>
<p>数组的 <strong>分数</strong><code>sum(nums1)</code><code>sum(nums2)</code> 中的最大值,其中 <code>sum(arr)</code> 是数组 <code>arr</code> 中所有元素之和。</p>
<p>返回 <strong>可能的最大分数</strong></p>
<p><strong>子数组 </strong>是数组中连续的一个元素序列。<code>arr[left...right]</code> 表示子数组包含 <code>nums</code> 中下标 <code>left</code><code>right</code> 之间的元素<strong>(含</strong> 下标 <code>left</code><code>right</code> 对应元素<strong></strong></p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre>
<strong>输入:</strong>nums1 = [60,60,60], nums2 = [10,90,10]
<strong>输出:</strong>210
<strong>解释:</strong>选择 left = 1 和 right = 1 ,得到 nums1 = [60,<em><strong>90</strong></em>,60] 和 nums2 = [10,<em><strong>60</strong></em>,10] 。
分数为 max(sum(nums1), sum(nums2)) = max(210, 80) = 210 。</pre>
<p><strong>示例 2</strong></p>
<pre>
<strong>输入:</strong>nums1 = [20,40,20,70,30], nums2 = [50,20,50,40,20]
<strong>输出:</strong>220
<strong>解释:</strong>选择 left = 3 和 right = 4 ,得到 nums1 = [20,40,20,<em><strong>40,20</strong></em>] 和 nums2 = [50,20,50,<em><strong>70,30</strong></em>] 。
分数为 max(sum(nums1), sum(nums2)) = max(140, 220) = 220 。
</pre>
<p><strong>示例 3</strong></p>
<pre>
<strong>输入:</strong>nums1 = [7,11,13], nums2 = [1,1,1]
<strong>输出:</strong>31
<strong>解释:</strong>选择不交换任何子数组。
分数为 max(sum(nums1), sum(nums2)) = max(31, 3) = 31 。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>n == nums1.length == nums2.length</code></li>
<li><code>1 &lt;= n &lt;= 10<sup>5</sup></code></li>
<li><code>1 &lt;= nums1[i], nums2[i] &lt;= 10<sup>4</sup></code></li>
</ul>

View File

@@ -0,0 +1,33 @@
<p>给你一个下标从 <strong>0</strong>&nbsp;开始的整数数组&nbsp;<code>nums</code>&nbsp;。一次操作中,选择 <strong>任意</strong>&nbsp;非负整数&nbsp;<code>x</code>&nbsp;和一个下标&nbsp;<code>i</code>&nbsp;<strong>更新</strong>&nbsp;<code>nums[i]</code>&nbsp;&nbsp;<code>nums[i] AND (nums[i] XOR x)</code>&nbsp;</p>
<p>注意,<code>AND</code>&nbsp;是逐位与运算,<code>XOR</code>&nbsp;是逐位异或运算。</p>
<p>请你执行 <strong>任意次</strong>&nbsp;更新操作,并返回&nbsp;<code>nums</code>&nbsp;中所有元素&nbsp;<strong>最大</strong>&nbsp;逐位异或和。</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre><b>输入:</b>nums = [3,2,4,6]
<b>输出:</b>7
<b>解释:</b>选择 x = 4 和 i = 3 进行操作num[3] = 6 AND (6 XOR 4) = 6 AND 2 = 2 。
现在nums = [3, 2, 4, 2] 且所有元素逐位异或得到 3 XOR 2 XOR 4 XOR 2 = 7 。
可知 7 是能得到的最大逐位异或和。
注意,其他操作可能也能得到逐位异或和 7 。</pre>
<p><strong>示例 2</strong></p>
<pre><b>输入:</b>nums = [1,2,3,9,2]
<b>输出:</b>11
<b>解释:</b>执行 0 次操作。
所有元素的逐位异或和为 1 XOR 2 XOR 3 XOR 9 XOR 2 = 11 。
可知 11 是能得到的最大逐位异或和。</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= nums.length &lt;= 10<sup>5</sup></code></li>
<li><code>0 &lt;= nums[i] &lt;= 10<sup>8</sup></code></li>
</ul>

View File

@@ -0,0 +1,34 @@
<p>一条街道上共有 <code>n * 2</code><strong>地块</strong> ,街道的两侧各有 <code>n</code> 个地块。每一边的地块都按从 <code>1</code><code>n</code> 编号。每个地块上都可以放置一所房子。</p>
<p>现要求街道同一侧不能存在两所房子相邻的情况,请你计算并返回放置房屋的方式数目。由于答案可能很大,需要对 <code>10<sup>9</sup> + 7</code> 取余后再返回。</p>
<p>注意,如果一所房子放置在这条街某一侧上的第 <code>i</code> 个地块,不影响在另一侧的第 <code>i</code> 个地块放置房子。</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre><strong>输入:</strong>n = 1
<strong>输出:</strong>4
<strong>解释:</strong>
可能的放置方式:
1. 所有地块都不放置房子。
2. 一所房子放在街道的某一侧。
3. 一所房子放在街道的另一侧。
4. 放置两所房子,街道两侧各放置一所。
</pre>
<p><strong>示例 2</strong></p>
<img alt="" src="https://assets.leetcode.com/uploads/2022/05/12/arrangements.png" style="width: 500px; height: 500px;">
<pre><strong>输入:</strong>n = 2
<strong>输出:</strong>9
<strong>解释:</strong>如上图所示,共有 9 种可能的放置方式。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= n &lt;= 10<sup>4</sup></code></li>
</ul>

View File

@@ -0,0 +1,38 @@
<p>给你一个整数&nbsp;<code>n</code>&nbsp;,表示一张<strong>&nbsp;无向图</strong>&nbsp;中有 <code>n</code>&nbsp;个节点,编号为&nbsp;<code>0</code>&nbsp;&nbsp;<code>n - 1</code>&nbsp;。同时给你一个二维整数数组&nbsp;<code>edges</code>&nbsp;,其中&nbsp;<code>edges[i] = [a<sub>i</sub>, b<sub>i</sub>]</code>&nbsp;表示节点&nbsp;<code>a<sub>i</sub></code>&nbsp;<code>b<sub>i</sub></code>&nbsp;之间有一条&nbsp;<strong>无向</strong>&nbsp;边。</p>
<p>请你返回 <strong>无法互相到达</strong>&nbsp;的不同 <strong>点对数目</strong>&nbsp;</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<p><img alt="" src="https://assets.leetcode.com/uploads/2022/05/05/tc-3.png" style="width: 267px; height: 169px;"></p>
<pre><b>输入:</b>n = 3, edges = [[0,1],[0,2],[1,2]]
<b>输出:</b>0
<b>解释:</b>所有点都能互相到达,意味着没有点对无法互相到达,所以我们返回 0 。
</pre>
<p><strong>示例 2</strong></p>
<p><img alt="" src="https://assets.leetcode.com/uploads/2022/05/05/tc-2.png" style="width: 295px; height: 269px;"></p>
<pre><b>输入:</b>n = 7, edges = [[0,2],[0,5],[2,4],[1,6],[5,4]]
<b>输出:</b>14
<b>解释:</b>总共有 14 个点对互相无法到达:
[[0,1],[0,3],[0,6],[1,2],[1,3],[1,4],[1,5],[2,3],[2,6],[3,4],[3,5],[3,6],[4,6],[5,6]]
所以我们返回 14 。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= n &lt;= 10<sup>5</sup></code></li>
<li><code>0 &lt;= edges.length &lt;= 2 * 10<sup>5</sup></code></li>
<li><code>edges[i].length == 2</code></li>
<li><code>0 &lt;= a<sub>i</sub>, b<sub>i</sub> &lt; n</code></li>
<li><code>a<sub>i</sub> != b<sub>i</sub></code></li>
<li>不会有重复边。</li>
</ul>

View File

@@ -0,0 +1,39 @@
<p>给你一个字符串&nbsp;<code>s</code>&nbsp;,每&nbsp;<strong>两个</strong>&nbsp;连续竖线&nbsp;<code>'|'</code>&nbsp;<strong>一对</strong>&nbsp;。换言之,第一个和第二个&nbsp;<code>'|'</code>&nbsp;为一对,第三个和第四个&nbsp;<code>'|'</code>&nbsp;为一对,以此类推。</p>
<p>请你返回 <strong>不在</strong> 竖线对之间,<code>s</code>&nbsp;&nbsp;<code>'*'</code>&nbsp;的数目。</p>
<p><strong>注意</strong>,每个竖线&nbsp;<code>'|'</code>&nbsp;都会 <strong>恰好</strong>&nbsp;属于一个对。</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<pre><b>输入:</b>s = "l|*e*et|c**o|*de|"
<b>输出:</b>2
<b>解释:</b>不在竖线对之间的字符加粗加斜体后,得到字符串:"<strong><em>l</em></strong>|*e*et|<strong><em>c**o</em></strong>|*de|" 。
第一和第二条竖线 '|' 之间的字符不计入答案。
同时,第三条和第四条竖线 '|' 之间的字符也不计入答案。
不在竖线对之间总共有 2 个星号,所以我们返回 2 。</pre>
<p><strong>示例 2</strong></p>
<pre><b>输入:</b>s = "iamprogrammer"
<b>输出:</b>0
<b>解释:</b>在这个例子中s 中没有星号。所以返回 0 。
</pre>
<p><strong>示例 3</strong></p>
<pre><b>输入:</b>s = "yo|uar|e**|b|e***au|tifu|l"
<b>输出:</b>5
<b>解释:</b>需要考虑的字符加粗加斜体后:"<strong><em>yo</em></strong>|uar|<strong><em>e**</em></strong>|b|<strong><em>e***au</em></strong>|tifu|<strong><em>l</em></strong>" 。不在竖线对之间总共有 5 个星号。所以我们返回 5 。</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= s.length &lt;= 1000</code></li>
<li><code>s</code>&nbsp;只包含小写英文字母,竖线&nbsp;<code>'|'</code>&nbsp;和星号&nbsp;<code>'*'</code>&nbsp;</li>
<li><code>s</code>&nbsp;包含 <strong>偶数</strong>&nbsp;个竖线&nbsp;<code>'|'</code></li>
</ul>