Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore: update lc problems #1975

Merged
merged 1 commit into from
Nov 17, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 12 additions & 12 deletions solution/0000-0099/0027.Remove Element/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,13 @@

<!-- 这里写题目描述 -->

<p>给你一个数组 <code>nums</code><em> </em>和一个值 <code>val</code>,你需要 <strong><a href="https://baike.baidu.com/item/%E5%8E%9F%E5%9C%B0%E7%AE%97%E6%B3%95" target="_blank">原地</a></strong> 移除所有数值等于 <code>val</code><em> </em>的元素,并返回移除后数组的新长度。</p>
<p>给你一个数组 <code>nums</code><em>&nbsp;</em>和一个值 <code>val</code>,你需要 <strong><a href="https://baike.baidu.com/item/%E5%8E%9F%E5%9C%B0%E7%AE%97%E6%B3%95" target="_blank">原地</a></strong> 移除所有数值等于&nbsp;<code>val</code><em>&nbsp;</em>的元素,并返回移除后数组的新长度。</p>

<p>不要使用额外的数组空间,你必须仅使用 <code>O(1)</code> 额外空间并 <strong><a href="https://baike.baidu.com/item/%E5%8E%9F%E5%9C%B0%E7%AE%97%E6%B3%95" target="_blank">原地 </a>修改输入数组</strong>。</p>

<p>元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。</p>

<p> </p>
<p>&nbsp;</p>

<p><strong>说明:</strong></p>

Expand All @@ -28,37 +28,37 @@ int len = removeElement(nums, val);

// 在函数里修改输入数组对于调用者是可见的。
// 根据你的函数返回的长度, 它会打印出数组中<strong> 该长度范围内</strong> 的所有元素。
for (int i = 0; i < len; i++) {
    print(nums[i]);
for (int i = 0; i &lt; len; i++) {
&nbsp; &nbsp; print(nums[i]);
}
</pre>

<p> </p>
<p>&nbsp;</p>

<p><strong>示例 1:</strong></p>

<pre>
<strong>输入:</strong>nums = [3,2,2,3], val = 3
<strong>输出:</strong>2, nums = [2,2]
<strong>解释:</strong>函数应该返回新的长度 <strong>2</strong>, 并且 nums<em> </em>中的前两个元素均为 <strong>2</strong>。你不需要考虑数组中超出新长度后面的元素。例如,函数返回的新长度为 2 ,而 nums = [2,2,3,3] 或 nums = [2,2,0,0],也会被视作正确答案。
<strong>解释:</strong>函数应该返回新的长度 <strong><code>2</code></strong>, 并且 nums<em> </em>中的前两个元素均为 <strong>2</strong>。你不需要考虑数组中超出新长度后面的元素。例如,函数返回的新长度为 2 ,而 nums = [2,2,3,3] 或 nums = [2,2,0,0],也会被视作正确答案。
</pre>

<p><strong>示例 2:</strong></p>

<pre>
<strong>输入:</strong>nums = [0,1,2,2,3,0,4,2], val = 2
<strong>输出:</strong>5, nums = [0,1,4,0,3]
<strong>解释:</strong>函数应该返回新的长度 <strong><code>5</code></strong>, 并且 nums 中的前五个元素为 <strong><code>0</code></strong>, <strong><code>1</code></strong>, <strong><code>3</code></strong>, <strong><code>0</code></strong>, <strong>4</strong>。注意这五个元素可为任意顺序。你不需要考虑数组中超出新长度后面的元素。
<strong>输出:</strong>5, nums = [0,1,3,0,4]
<strong>解释:</strong>函数应该返回新的长度 <strong><code>5</code></strong>, 并且 nums 中的前五个元素为 <strong><code>0</code></strong>, <strong><code>1</code></strong>, <strong><code>3</code></strong>, <strong><code>0</code></strong>, <strong><code>4</code></strong>。注意这五个元素可为任意顺序。你不需要考虑数组中超出新长度后面的元素。
</pre>

<p> </p>
<p>&nbsp;</p>

<p><strong>提示:</strong></p>

<ul>
<li><code>0 <= nums.length <= 100</code></li>
<li><code>0 <= nums[i] <= 50</code></li>
<li><code>0 <= val <= 100</code></li>
<li><code>0 &lt;= nums.length &lt;= 100</code></li>
<li><code>0 &lt;= nums[i] &lt;= 50</code></li>
<li><code>0 &lt;= val &lt;= 100</code></li>
</ul>

## 解法
Expand Down
6 changes: 3 additions & 3 deletions solution/0200-0299/0205.Isomorphic Strings/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,20 +17,20 @@
<p><strong>示例 1:</strong></p>

<pre>
<strong>输入:</strong>s = <code>"egg", </code>t = <code>"add"</code>
<strong>输入:</strong>s = <code>"egg"</code>, t = <code>"add"</code>
<strong>输出:</strong>true
</pre>

<p><strong>示例 2:</strong></p>

<pre>
<strong>输入:</strong>s = <code>"foo", </code>t = <code>"bar"</code>
<strong>输入:</strong>s = <code>"foo"</code>, t = <code>"bar"</code>
<strong>输出:</strong>false</pre>

<p><strong>示例 3:</strong></p>

<pre>
<strong>输入:</strong>s = <code>"paper", </code>t = <code>"title"</code>
<strong>输入:</strong>s = <code>"paper"</code>, t = <code>"title"</code>
<strong>输出:</strong>true</pre>

<p>&nbsp;</p>
Expand Down
12 changes: 6 additions & 6 deletions solution/0400-0499/0410.Split Array Largest Sum/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,16 @@

<!-- 这里写题目描述 -->

<p>给定一个非负整数数组 <code>nums</code> 和一个整数&nbsp;<code>m</code> ,你需要将这个数组分成&nbsp;<code>m</code><em>&nbsp;</em>个非空的连续子数组。</p>
<p>给定一个非负整数数组 <code>nums</code> 和一个整数&nbsp;<code>k</code> ,你需要将这个数组分成&nbsp;<code>k</code><em>&nbsp;</em>个非空的连续子数组。</p>

<p>设计一个算法使得这&nbsp;<code>m</code><em>&nbsp;</em>个子数组各自和的最大值最小。</p>
<p>设计一个算法使得这&nbsp;<code>k</code><em>&nbsp;</em>个子数组各自和的最大值最小。</p>

<p>&nbsp;</p>

<p><strong>示例 1:</strong></p>

<pre>
<strong>输入:</strong>nums = [7,2,5,10,8], m = 2
<strong>输入:</strong>nums = [7,2,5,10,8], k = 2
<strong>输出:</strong>18
<strong>解释:</strong>
一共有四种方法将 nums 分割为 2 个子数组。
Expand All @@ -25,14 +25,14 @@
<p><strong>示例 2:</strong></p>

<pre>
<strong>输入:</strong>nums = [1,2,3,4,5], m = 2
<strong>输入:</strong>nums = [1,2,3,4,5], k = 2
<strong>输出:</strong>9
</pre>

<p><strong>示例 3:</strong></p>

<pre>
<strong>输入:</strong>nums = [1,4,4], m = 3
<strong>输入:</strong>nums = [1,4,4], k = 3
<strong>输出:</strong>4
</pre>

Expand All @@ -43,7 +43,7 @@
<ul>
<li><code>1 &lt;= nums.length &lt;= 1000</code></li>
<li><code>0 &lt;= nums[i] &lt;= 10<sup>6</sup></code></li>
<li><code>1 &lt;= m &lt;= min(50, nums.length)</code></li>
<li><code>1 &lt;= k &lt;= min(50, nums.length)</code></li>
</ul>

## 解法
Expand Down
81 changes: 50 additions & 31 deletions solution/0400-0499/0489.Robot Room Cleaner/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,59 +6,78 @@

<!-- 这里写题目描述 -->

<p>房间(用格栅表示)中有一个扫地机器人。格栅中的每一个格子有空和障碍物两种可能。</p>
<p>房间中的某个位置上有一个机器人,你需要控制它清扫房间。房间被建模为一个 <code>m x n</code> 的二进制网格,其中 <code>0</code> 表示单元格中有障碍物,<code>1</code> 表示空单元格。</p>

<p>扫地机器人提供4个API,可以向前进,向左转或者向右转。每次转弯90度。</p>
<p>机器人从一个未知的空单元格开始出发,并且你无法访问网格,但你可以使用给定的 API <code>Robot</code> 控制机器人。</p>

<p>当扫地机器人试图进入障碍物格子时,它的碰撞传感器会探测出障碍物,使它停留在原地。</p>
<p>你的任务是使用机器人清扫整个房间(即清理房间中的每个空单元格)。机器人具有四个给定的API,可以前进、向左转或向右转。每次转弯 90 度。</p>

<p>请利用提供的4个API编写让机器人清理整个房间的算法。</p>
<p>当机器人试图移动到一个存在障碍物的单元格时,它的碰撞传感器会检测到障碍物,并停留在当前单元格。</p>

<p>设计一个算法,使用下述 API 清扫整个房间:</p>

<pre>
interface Robot {
&nbsp; // 若下一个方格为空,则返回true,并移动至该方格
&nbsp; // 若下一个方格为障碍物,则返回false,并停留在原地
&nbsp; // 若下一个单元格为空,则返回 true ,并移动至该单元格。
&nbsp; // 若下一个单元格为障碍物,则返回 false ,并停留在当前单元格。
&nbsp; boolean move();

// 在调用turnLeft/turnRight后机器人会停留在原位置
&nbsp; // 每次转弯90度
// 在调用 turnLeft/turnRight 后机器人会停留在当前单元格。
&nbsp; // 每次转弯 90 度。
&nbsp; void turnLeft();
&nbsp; void turnRight();

// 清理所在方格
// 清理当前单元格。
void clean();
}
</pre>

<p><strong>示例:</strong></p>
<p><strong>注意</strong> 扫地机器人的初始方向向上。你可以假定网格的四周都被墙包围。</p>

<p>&nbsp;</p>

<p><strong>自定义测试:</strong></p>

<p>输入只用于初始化房间和机器人的位置。你需要「盲解」这个问题。换而言之,你必须在对房间和机器人位置一无所知的情况下,只使用 4 个给出的 API 解决问题。&nbsp;</p>

<p>&nbsp;</p>

<p><strong><img alt="" src="https://fastly.jsdelivr.net/gh/doocs/leetcode@main/solution/0400-0499/0489.Robot%20Room%20Cleaner/images/1695782910-iCEGqJ-image.png" style="width: 644px; height: 405px;" /></strong></p>
<p><strong>示例 1:</strong></p>
<img alt="" src="https://fastly.jsdelivr.net/gh/doocs/leetcode@main/solution/0400-0499/0489.Robot%20Room%20Cleaner/images/lc-grid.jpg" style="width: 500px; height: 314px;" />
<pre>
<strong>输入:</strong>room = [[1,1,1,1,1,0,1,1],[1,1,1,1,1,0,1,1],[1,0,1,1,1,1,1,1],[0,0,0,1,0,0,0,0],[1,1,1,1,1,1,1,1]], row = 1, col = 3
<strong>输出:</strong>Robot cleaned all rooms.
<strong>解释:</strong>
房间内的所有单元格用 0 或 1 填充。
0 表示障碍物,1 表示可以通过。
机器人从 row=1, col=3 的初始位置出发。
在左上角的一行以下,三列以右。
</pre>

<p><strong>示例 2:</strong></p>

<pre>
<strong>输入:</strong>
room = [
[1,1,1,1,1,0,1,1],
[1,1,1,1,1,0,1,1],
[1,0,1,1,1,1,1,1],
[0,0,0,1,0,0,0,0],
[1,1,1,1,1,1,1,1]
],
row = 1,
col = 3

<strong>解析:</strong>
房间格栅用0或1填充。0表示障碍物,1表示可以通过。
机器人从row=1,col=3的初始位置出发。在左上角的一行以下,三列以右。
<strong>输入:</strong>room = [[1]], row = 0, col = 0
<strong>输出:</strong>Robot cleaned all rooms.
</pre>

<p><strong>注意:</strong></p>
<p>&nbsp;</p>

<p><strong>提示:</strong></p>

<ul>
<li><code>m == room.length</code></li>
<li><code>n == room[i].length</code></li>
<li><code>1 &lt;= m &lt;= 100</code></li>
<li><code>1 &lt;= n &lt;= 200</code></li>
<li><code>room[i][j]</code> 为 <code>0</code> 或 <code>1</code>.</li>
<li><code>0 &lt;= row &lt;&nbsp;m</code></li>
<li><code>0 &lt;= col &lt; n</code></li>
<li><code>room[row][col] == 1</code></li>
<li>所有空单元格都可以从起始位置出发访问到。</li>
</ul>

<ol>
<li>输入只用于初始化房间和机器人的位置。你需要“盲解”这个问题。换而言之,你必须在对房间和机器人位置一无所知的情况下,只使用4个给出的API解决问题。&nbsp;</li>
<li>扫地机器人的初始位置一定是空地。</li>
<li>扫地机器人的初始方向向上。</li>
<li>所有可抵达的格子都是相连的,亦即所有标记为1的格子机器人都可以抵达。</li>
<li>可以假定格栅的四周都被墙包围。</li>
</ol>

## 解法
Expand Down
2 changes: 1 addition & 1 deletion solution/0500-0599/0532.K-diff Pairs in an Array/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
<ul>
<li><code>0 &lt;= i, j &lt; nums.length</code></li>
<li><code>i != j</code></li>
<li><code>nums[i] - nums[j] == k</code></li>
<li><code>|nums[i] - nums[j]| == k</code></li>
</ul>

<p><strong>注意</strong>,<code>|val|</code> 表示 <code>val</code> 的绝对值。</p>
Expand Down
96 changes: 50 additions & 46 deletions solution/0600-0699/0631.Design Excel Sum Formula/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,87 +6,91 @@

<!-- 这里写题目描述 -->

<p>你的任务是实现 Excel 的求和功能,具体的操作如下:</p>
<p>请你设计 <strong>Excel</strong> 中的基本功能,并实现求和公式。</p>

<p><code>Excel(int H, char W):</code> 这是一个构造函数,输入表明了 Excel 的高度和宽度。H 是一个正整数,范围从 1 到 26,代表高度。W 是一个字符,范围从 'A' 到 'Z',宽度等于从 'A' 到 W 的字母个数。Excel 表格是一个高度 * 宽度的二维整数数组,数组中元素初始化为 0。第一行下标从 1 开始,第一列下标从 'A' 开始。</p>
<p>实现 <code>Excel</code> 类:</p>

<p> </p>

<p><code>void Set(int row, char column, int val):</code> 设置 <code>C(row, column)</code> 中的值为 val。</p>

<p> </p>

<p><code>int Get(int row, char column):</code> 返回 <code>C(row, column)</code> 中的值。</p>

<p> </p>

<p><code>int Sum(int row, char column, List of Strings : numbers):</code> 这个函数会将计算的结果放入 <code>C(row, column)</code> 中,计算的结果等于在 <code>numbers</code> 中代表的所有元素之和,这个函数同时也会将这个结果返回。求和公式会一直计算更新结果直到这个公式被其他的值或者公式覆盖。</p>

<p><code>numbers</code> 是若干字符串的集合,每个字符串代表单个位置或一个区间。如果这个字符串表示单个位置,它的格式如下:<code>ColRow</code>,例如 "F7" 表示位置 (7, F) 。如果这个字符串表示一个区间,它的格式如下:<code>ColRow1:ColRow2</code>。区间就是左上角为 ColRow1 右下角为 ColRow2 的长方形。</p>
<ul>
<li><code>Excel(int height, char width)</code>:用高度&nbsp;<code>height</code> 和宽度&nbsp;<code>width</code> 初始化对象。该表格是一个大小为 <code>height x width</code> 的整数矩阵 <code>mat</code>,其中行下标范围是 <code>[1, height]</code> ,列下标范围是 <code>['A', width]</code> 。初始情况下,所有的值都应该为 <strong>零</strong> 。</li>
<li><code>void set(int row, char column, int val)</code>:将 <code>mat[row][column]</code> 的值更改为 <code>val</code> 。</li>
<li><code>int get(int row, char column)</code>:返回 <code>mat[row][column]</code> 的值。</li>
<li><code>int sum(int row, char column, List&lt;String&gt; numbers)</code>:将 <code>mat[row][column]</code> 的值设为由 <code>numbers</code> 表示的单元格的和,并返回 <code>mat[row][column]</code> 的值。此求和公式应该 <strong>长期作用于</strong> 该单元格,直到该单元格被另一个值或另一个求和公式覆盖。其中,<code>numbers[i]</code> 的格式可以为:
<ul>
<li><code>"ColRow"</code>:表示某个单元格。
<ul>
<li>例如,<code>"F7"</code> 表示单元格 <code>mat[7]['F']</code> 。</li>
</ul>
</li>
<li><code>"ColRow1:ColRow2"</code>:表示一组单元格。该范围将始终为一个矩形,其中 <code>"ColRow1"</code> 表示左上角单元格的位置,<code>"ColRow2"</code> 表示右下角单元格的位置。
<ul>
<li>例如,<code>"B3:F7"</code> 表示 <code>3 &lt;= i &lt;= 7</code> 和 <code>'B' &lt;= j &lt;= 'F'</code> 的单元格 <code>mat[i][j]</code> 。</li>
</ul>
</li>
</ul>
</li>
</ul>

<p> </p>
<p><strong>注意:</strong>可以假设不会出现循环求和引用。</p>

<p><strong>注意: </strong>你可以认为不会出现循环求和的定义,比如说:<code>mat[1]['A'] == sum(1, "B")</code> 和 <code>mat[1]['B'] == sum(1, "A")</code>.</p>
<ul>
<li>例如,<code>mat[1]['A'] == sum(1, "B")</code>,且 <code>mat[1]['B'] == sum(1, "A")</code> 。</li>
</ul>

<p> </p>
<p>&nbsp;</p>

<p><strong>示例 1:</strong></p>
<p><strong>示例 1</strong></p>

<pre>
<strong>输入:</strong>
["Excel", "set", "sum", "set", "get"]
<strong>输入
</strong>["Excel", "set", "sum", "set", "get"]
[[3, "C"], [1, "A", 2], [3, "C", ["A1", "A1:B2"]], [2, "B", 2], [3, "C"]]
<b>输出:</b>
<strong>输出:</strong>
[null, null, 4, null, 6]

<b>解释:</b>
<strong>解释:</strong>
执行以下操作:
Excel excel = new Excel(3, "C");
// 构造一个 3*3 的二维数组,初始化全是 0
// 构造一个 3 * 3 的二维数组,所有值初始化为零
// A B C
// 1 0 0 0
// 2 0 0 0
// 3 0 0 0
excel.set(1, "A", 2);
// 设置 C(1,"A") 为 2
// 将 mat[1]["A"] 设置为 2
// A B C
// 1 2 0 0
// 2 0 0 0
// 3 0 0 0
excel.sum(3, "C", ["A1", "A1:B2"]); // return 4
// 将 C(3,"C") 的值设为 C(1,"A") 单点以及左上角为 C(1,"A") 右下角为 C(2,"B") 的长方形两者之和。返回值 4。
excel.sum(3, "C", ["A1", "A1:B2"]); // 返回 4
// 将 mat[3]["C"] 设置为 mat[1]["A"] 的值与矩形范围的单元格和的和,该范围的左上角单元格位置为 mat[1]["A"] ,右下角单元格位置为 mat[2]["B"] 。
// A B C
// 1 2 0 0
// 2 0 0 0
// 3 0 0 4
excel.set(2, "B", 2);
// 将 C(2,"B") 设为 2。 注意 C(3, "C") 的值也同时改变
// 将 mat[2]["B"] 设置为 2 。注意 mat[3]["C"] 也应该更改
// A B C
// 1 2 0 0
// 2 0 2 0
// 3 0 0 6
excel.get(3, "C"); // 返回 6</pre>
excel.get(3, "C"); // 返回 6
</pre>

<p> </p>
<p>&nbsp;</p>

<p><strong>提示:</strong></p>
<p><strong>提示</strong></p>

<ul>
<li><code>1 <= height <= 26</code></li>
<li><code>'A' <= width <= 'Z'</code></li>
<li><code>1 <= row <= height</code></li>
<li><code>'A' <= column <= width</code></li>
<li><code>-100 <= val <= 100</code></li>
<li><code>1 <= numbers.length <= 5</code></li>
<li><code>numbers[i]</code> 的格式为 <code>"ColRow"</code> 或 <code>"ColRow1:ColRow2"</code>.</li>
<li><code>set</code><code>get</code>, and <code>sum</code> 操作数不超过 100</li>
<li><code>1 &lt;= height &lt;= 26</code></li>
<li><code>'A' &lt;= width &lt;= 'Z'</code></li>
<li><code>1 &lt;= row &lt;= height</code></li>
<li><code>'A' &lt;= column &lt;= width</code></li>
<li><code>-100 &lt;= val &lt;= 100</code></li>
<li><code>1 &lt;= numbers.length &lt;= 5</code></li>
<li><code>numbers[i]</code> 的格式为 <code>"ColRow"</code><code>"ColRow1:ColRow2"</code></li>
<li>最多会对 <code>set</code><code>get</code><code>sum</code> 进行 <code>100</code> 次调用。</li>
</ul>

<p> </p>

<ol>
</ol>

<p> </p>

## 解法

<!-- 这里可写通用的实现逻辑 -->
Expand Down
Loading