Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

[pull] master from labuladong:master #100

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

Merged
pull merged 3 commits into AlgorithmAndLeetCode:master from labuladong:master
Jun 13, 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
101 changes: 76 additions & 25 deletions 多语言解法代码/solution_code.md
View file Open in desktop
Original file line number Diff line number Diff line change
Expand Up @@ -2624,42 +2624,41 @@ func backtrack(left, right int, track *string, res *[]string) {
```

```java
// by labuladong (java)
// by chatGPT (java)
class Solution {
public:
vector<string> generateParenthesis(int n) {
if (n == 0) return {};
public List<String> generateParenthesis(int n) {
if (n == 0) return new ArrayList<>();
// 记录所有合法的括号组合
vector<string> res;
List<String> res = new ArrayList<>();
// 回溯过程中的路径
string track;
StringBuilder track = new StringBuilder();
// 可用的左括号和右括号数量初始化为 n
backtrack(n, n, track, res);
return res;
}

// 可用的左括号数量为 left 个,可用的右括号数量为 rgiht
// 可用的左括号数量为 left 个,可用的右括号数量为 right
void backtrack(int left, int right,
string& track, vector<string>& res) {
StringBuilder track, List<String> res) {
// 若左括号剩下的多,说明不合法
if (right < left) return;
// 数量小于 0 肯定是不合法的
if (left < 0 || right < 0) return;
// 当所有括号都恰好用完时,得到一个合法的括号组合
if (left == 0 && right == 0) {
res.push_back(track);
res.add(track.toString());
return;
}

// 尝试放一个左括号
track.push_back('('); // 选择
track.append('('); // 选择
backtrack(left - 1, right, track, res);
track.pop_back(); // 撤消选择
track.deleteCharAt(track.length() - 1); // 撤消选择

// 尝试放一个右括号
track.push_back(')'); // 选择
track.append(')'); // 选择
backtrack(left, right - 1, track, res);
track.pop_back(); // 撤消选择
track.deleteCharAt(track.length() - 1); // 撤消选择
}
}
```
Expand Down Expand Up @@ -26417,8 +26416,9 @@ class Solution:
for v in nums:
valToFreq[v] = valToFreq.get(v, 0) + 1

# 优先队列按照键值对中的值(元素出现频率)从小到大排序
pq = [(freq, val) for val, freq in valToFreq.items()]
# 二叉堆按照键值对中的值(元素出现频率的负值)从小到大排列
# 从二叉堆中pop出来的就是频率最大的键 (频率越大,负值越小)
pq = [(-freq, val) for val, freq in valToFreq.items()]
heapq.heapify(pq)

# 将前 k 个最大元素装入 res
Expand Down Expand Up @@ -26872,7 +26872,7 @@ func backtrack(left int, right int, track *string, res *[]string) {
```

```java
// by labuladong (java)
// by chatGPT (java)
class Solution {
public List<String> generateParenthesis(int n) {
if (n == 0) return new ArrayList<>();
Expand Down Expand Up @@ -32964,6 +32964,53 @@ class Solution:

https://leetcode.cn/problems/lMSNwu 的多语言解法👆

https://leetcode.cn/problems/letter-case-permutation 的多语言解法👇

```java
// by labuladong (java)
class Solution {
public List<String> letterCasePermutation(String s) {
backtrack(s, 0);
return res;
}

StringBuilder track = new StringBuilder();
List<String> res = new LinkedList<>();

void backtrack(String s, int index) {
if (index == s.length()) {
res.add(track.toString());
return;
}

if ('0' <= s.charAt(index) && s.charAt(index) <= '9') {
// s[index] 是数字
// 做选择
track.append(s.charAt(index));
backtrack(s, index + 1);
// 撤销选择
track.deleteCharAt(track.length() - 1);
} else {
// s[index] 是字母

// 小写字母,做选择
track.append(Character.toLowerCase(s.charAt(index)));
backtrack(s, index + 1);
// 撤销选择
track.deleteCharAt(track.length() - 1);

// 大写字母,做选择
track.append(Character.toUpperCase(s.charAt(index)));
backtrack(s, index + 1);
// 撤销选择
track.deleteCharAt(track.length() - 1);
}
}
}
```

https://leetcode.cn/problems/letter-case-permutation 的多语言解法👆

https://leetcode.cn/problems/letter-combinations-of-a-phone-number 的多语言解法👇

```cpp
Expand Down Expand Up @@ -68764,39 +68811,43 @@ MyQueue.prototype.empty = function() {

```python
# by chatGPT (python)
class MyQueue:
class CQueue:
def __init__(self):
"""
初始化一个队列,使用两个堆栈 s1 和 s2
"""
self.s1 = []
self.s2 = []

def push(self, x: int) -> None:
def appendTail(self, value):
"""
添加元素到队尾
"""
self.s1.append(x)
self.s1.append(value)

def pop(self) -> int:
def deleteHead(self):
"""
删除队头的元素并返回
"""
# 先调用 peek 保证 s2 非空
self.peek()
return self.s2.pop()
if self.peek() is None:
return -1
else:
return self.s2.pop()

def peek(self) -> int:
def peek(self):
"""
返回队头元素
"""
if not self.s2:
# 把 s1 元素压入 s2
while self.s1:
self.s2.append(self.s1.pop())
return self.s2[-1]

return self.s2[-1] if self.s2 else None


def empty(self) -> bool:
def empty(self):
"""
判断队列是否为空
"""
Expand Down
1 change: 1 addition & 0 deletions 算法思维系列/回溯算法详解修订版.md
View file Open in desktop
Original file line number Diff line number Diff line change
Expand Up @@ -445,6 +445,7 @@ def backtrack(...):
| [698. Partition to K Equal Sum Subsets](https://leetcode.com/problems/partition-to-k-equal-sum-subsets/?show=1) | [698. 划分为k个相等的子集](https://leetcode.cn/problems/partition-to-k-equal-sum-subsets/?show=1) |
| [77. Combinations](https://leetcode.com/problems/combinations/?show=1) | [77. 组合](https://leetcode.cn/problems/combinations/?show=1) |
| [78. Subsets](https://leetcode.com/problems/subsets/?show=1) | [78. 子集](https://leetcode.cn/problems/subsets/?show=1) |
| [784. Letter Case Permutation](https://leetcode.com/problems/letter-case-permutation/?show=1) | [784. 字母大小写全排列](https://leetcode.cn/problems/letter-case-permutation/?show=1) |
| [93. Restore IP Addresses](https://leetcode.com/problems/restore-ip-addresses/?show=1) | [93. 复原 IP 地址](https://leetcode.cn/problems/restore-ip-addresses/?show=1) |
| - | [剑指 Offer 34. 二叉树中和为某一值的路径](https://leetcode.cn/problems/er-cha-shu-zhong-he-wei-mou-yi-zhi-de-lu-jing-lcof/?show=1) |
| - | [剑指 Offer II 079. 所有子集](https://leetcode.cn/problems/TVdhkn/?show=1) |
Expand Down

AltStyle によって変換されたページ (->オリジナル) /