引言

编程难题不仅能够锻炼你的逻辑思维和问题解决能力,还能让你的编码技能得到提升。本文将为你介绍10个趣味编程挑战,帮助你轻松提升编码思维,享受解决问题的乐趣。

1. 两数之和

题目描述:给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。

def two_sum(nums, target):
    for i in range(len(nums)):
        for j in range(i+1, len(nums)):
            if nums[i] + nums[j] == target:
                return [i, j]

2. 翻转字符串里的单词

题目描述:给定一个字符串,返回一个翻转顺序后每个单词的字符串,单词之间由一个空格分隔。

def reverse_words(s):
    words = s.split()
    return ' '.join(reversed(words))

3. 移除链表元素

题目描述:给定一个排序链表,删除所有重复的元素,使之每个元素只出现一次。

def remove_duplicates(head):
    current = head
    while current and current.next:
        if current.val == current.next.val:
            current.next = current.next.next
        else:
            current = current.next
    return head

4. 字母异位词分组

题目描述:给定一个字符串,将所有异位词分组。

def group_anagrams(s):
    anagrams = {}
    for word in s:
        sorted_word = ''.join(sorted(word))
        if sorted_word not in anagrams:
            anagrams[sorted_word] = [word]
        else:
            anagrams[sorted_word].append(word)
    return list(anagrams.values())

5. 合并区间

题目描述:给定一个区间的集合,请合并所有重叠的区间。

def merge(intervals):
    if not intervals:
        return []
    intervals.sort(key=lambda x: x[0])
    merged = [intervals[0]]
    for interval in intervals[1:]:
        if merged[-1][1] >= interval[0]:
            merged[-1][1] = max(merged[-1][1], interval[1])
        else:
            merged.append(interval)
    return merged

6. 旋转图像

题目描述:给定一个 n×n 的二维矩阵,将矩阵沿主对角线旋转 90 度。

def rotate(matrix):
    n = len(matrix)
    for i in range(n):
        for j in range(i, n-i-1):
            matrix[i][j], matrix[j][n-i-1] = matrix[j][n-i-1], matrix[i][j]
            matrix[i][n-i-1], matrix[n-i-1][j] = matrix[n-i-1][j], matrix[i][n-i-1]

7. 最长无重复子串

题目描述:给定一个字符串,找出最长的无重复子串的长度。

def length_of_longest_substring(s):
    start, max_len = 0, 0
    char_map = {}
    for end in range(len(s)):
        if s[end] in char_map:
            start = max(start, char_map[s[end]] + 1)
        char_map[s[end]] = end
        max_len = max(max_len, end - start + 1)
    return max_len

8. 有效的括号

题目描述:给定一个字符串,判断其是否为有效的括号序列。

def isValid(s):
    stack = []
    brackets = {'(': ')', '[': ']', '{': '}'}
    for char in s:
        if char in brackets:
            stack.append(char)
        elif not stack or brackets[stack.pop()] != char:
            return False
    return not stack

9. 合并K个排序链表

题目描述:给定K个排序链表,合并为一个新的排序链表。

def mergeKLists(lists):
    if not lists:
        return None
    while len(lists) > 1:
        merged = []
        for i in range(0, len(lists), 2):
            l1 = lists[i]
            l2 = lists[i+1] if i+1 < len(lists) else None
            merged.append(merge_two_lists(l1, l2))
        lists = merged
    return lists[0]

10. 最小栈

题目描述:设计一个支持 push、pop、top 操作,并能在常数时间内检索到最小元素的栈。

class MinStack:
    def __init__(self):
        self.stack = []
        self.min_stack = []

    def push(self, val: int) -> None:
        self.stack.append(val)
        if not self.min_stack or val <= self.min_stack[-1]:
            self.min_stack.append(val)

    def pop(self) -> None:
        if self.stack.pop() == self.min_stack[-1]:
            self.min_stack.pop()

    def top(self) -> int:
        return self.stack[-1]

    def getMin(self) -> int:
        return self.min_stack[-1]

总结

通过以上10个趣味编程挑战,相信你的编码思维和技能一定会有所提升。不断挑战自己,享受编程的乐趣吧!