diff --git "a/345円244円232円350円257円255円350円250円200円350円247円243円346円263円225円344円273円243円347円240円201円/solution_code.md" "b/345円244円232円350円257円255円350円250円200円350円247円243円346円263円225円344円273円243円347円240円201円/solution_code.md" index 59e52d4bdd..4c2974c2c7 100644 --- "a/345円244円232円350円257円255円350円250円200円350円247円243円346円263円225円344円273円243円347円240円201円/solution_code.md" +++ "b/345円244円232円350円257円255円350円250円200円350円247円243円346円263円225円344円273円243円347円240円201円/solution_code.md" @@ -2624,42 +2624,41 @@ func backtrack(left, right int, track *string, res *[]string) { ``` ```java -// by labuladong (java) +// by chatGPT (java) class Solution { - public: - vector generateParenthesis(int n) { - if (n == 0) return {}; + public List generateParenthesis(int n) { + if (n == 0) return new ArrayList(); // 记录所有合法的括号组合 - vector res; + List 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& res) { + StringBuilder track, List 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); // 撤消选择 } } ``` @@ -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 @@ -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 generateParenthesis(int n) { if (n == 0) return new ArrayList(); @@ -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 letterCasePermutation(String s) { + backtrack(s, 0); + return res; + } + + StringBuilder track = new StringBuilder(); + List 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 @@ -68764,7 +68811,7 @@ MyQueue.prototype.empty = function() { ```python # by chatGPT (python) -class MyQueue: +class CQueue: def __init__(self): """ 初始化一个队列,使用两个堆栈 s1 和 s2 @@ -68772,21 +68819,23 @@ class MyQueue: 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): """ 返回队头元素 """ @@ -68794,9 +68843,11 @@ class MyQueue: # 把 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): """ 判断队列是否为空 """ diff --git "a/347円256円227円346円263円225円346円200円235円347円273円264円347円263円273円345円210円227円/345円233円236円346円272円257円347円256円227円346円263円225円350円257円246円350円247円243円344円277円256円350円256円242円347円211円210円.md" "b/347円256円227円346円263円225円346円200円235円347円273円264円347円263円273円345円210円227円/345円233円236円346円272円257円347円256円227円346円263円225円350円257円246円350円247円243円344円277円256円350円256円242円347円211円210円.md" index 30ed11db6a..62dfc3a352 100644 --- "a/347円256円227円346円263円225円346円200円235円347円273円264円347円263円273円345円210円227円/345円233円236円346円272円257円347円256円227円346円263円225円350円257円246円350円247円243円344円277円256円350円256円242円347円211円210円.md" +++ "b/347円256円227円346円263円225円346円200円235円347円273円264円347円263円273円345円210円227円/345円233円236円346円272円257円347円256円227円346円263円225円350円257円246円350円247円243円344円277円256円350円256円242円347円211円210円.md" @@ -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) |

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