python-leetcode-645. 错误的集合

645. 错误的集合 - 力扣(LeetCode)

可以使用数学方法或者哈希表的方法来解决这个问题。以下是一个简单的 Python 代码实现:

def findErrorNums(nums):
    n = len(nums)
    num_set = set()
    duplicate = -1
    missing = -1
    
    for num in nums:
        if num in num_set:
            duplicate = num
        num_set.add(num)
    
    for i in range(1, n + 1):
        if i not in num_set:
            missing = i
            break
    
    return [duplicate, missing]

# 测试
nums = [1, 2, 2, 4]
print(findErrorNums(nums))  # 输出: [2, 3]

这个代码使用一个 set 来找到重复的数和丢失的数,时间复杂度为 O(n),空间复杂度也是 O(n)。如果想要优化空间,可以使用数学的方法(求和公式+求平方和公式)。如果你需要更高效的方法,欢迎讨论!

你给出的代码旨在解决一个关于摩尔斯电码的问题,比如 [LeetCode 804. Unique Morse Code Words](https://leetcode.com/problems/unique-morse-code-words/)。该问题要求将一组单词转换为摩尔斯电码,并统计其中有多少个**不同的摩尔斯电码表示**。 不过,你当前的代码中存在一些错误,特别是 `sovle` 函数中的逻辑错误和函数调用方式。我将为你详细解释并提供修正后的代码。 --- ### ✅ 正确的实现如下: ```python morses = [".-","-...","-.-.","-..",".","..-.","--.","....","..", ".---","-.-",".-..","--","-.","---",".--.","--.-",".-.", "...","-","..-","...-",".--","-..-","-.--","--.."] def uniqueMorseRepresentations(words): # 使用集合存储不同的摩尔斯电码 morse_set = set() for word in words: # 将每个字母转换为其对应的摩尔斯电码 morse_code = ''.join(morses[ord(char) - ord('a')] for char in word) morse_set.add(morse_code) return len(morse_set) # 测试数据 words = ["gin", "zen", "gig", "msg"] print(uniqueMorseRepresentations(words)) # 输出: 2 ``` --- ### 🔍 代码解释: 1. **morses 列表**:存储了从 'a' 到 'z' 的摩尔斯电码。 2. **uniqueMorseRepresentations 函数**: - 接收一个字符串列表 `words`。 - 初始化一个空集合 `morse_set` 用于存储唯一的摩尔斯电码。 - 遍历每个单词 `word`,然后对每个字母进行转换。 - 使用 `ord(char) - ord('a')` 找到字母在 `morses` 列表中的索引。 - 将转换后的摩尔斯电码字符串加入集合。 3. 最后返回集合的长度,即不同的摩尔斯电码数量。 --- ### ❌ 原始代码问题: - `sovle` 函数中写成了 `for word in words_str`,但 `words_str` 是一个字符串,不是单词列表。 - `get_morses(words_str)` 应该是 `get_morses(word)`。 - `words = "GIN zen gig msg"` 没有被正确拆分成单词列表。 --- ### ✅ 如果你希望用原始方式修复,可以这样改: ```python morses = [".-","-...","-.-.","-..",".","..-.","--.","....","..",".---", "-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-", "..-","...-",".--","-..-","-.--","--.."] def get_morses(word): morses_words_str = "" for letter in word.lower(): morses_words_str += morses[ord(letter) - 97] return morses_words_str def solve(words_str): words = words_str.split() # 将字符串分割成单词列表 s = set() for word in words: morses_word = get_morses(word) s.add(morses_word) return len(s) # 调用 words = "GIN zen gig msg" print(solve(words)) # 输出: 2 ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值