leetcode做题总结,题目Clone Graph 133

本文详细介绍了如何使用广度优先搜索算法和哈希映射来克隆一个图结构,通过构建映射关系确保了图中每个节点的正确复制,并维护了节点之间的连接关系。

题目是复制一个图,方法是使用广度优先历遍,然后使用HASHMAP判断重复然后放入队列。像这种clone或者两者比较的题目有个好的方法是使用map使他们之间建立映射。


public class Solution {
    public UndirectedGraphNode cloneGraph(UndirectedGraphNode node) {
        if(node == null)
            return null;
 
        Queue<UndirectedGraphNode> queue = new LinkedList<UndirectedGraphNode>();
        HashMap<UndirectedGraphNode, UndirectedGraphNode> map = 
                                   new HashMap<UndirectedGraphNode,UndirectedGraphNode>();
 
        UndirectedGraphNode newHead = new UndirectedGraphNode(node.label);
 
        queue.offer(node);
        map.put(node, newHead);
 
        while(!queue.isEmpty()){
            UndirectedGraphNode curr = queue.poll();
            //List<UndirectedGraphNode> currNeighbors = curr.neighbors; 
 
            for(UndirectedGraphNode aNeighbor: curr.neighbors){
                if(!map.containsKey(aNeighbor)){
                    UndirectedGraphNode copy = new UndirectedGraphNode(aNeighbor.label);
                    map.put(aNeighbor,copy);
                    map.get(curr).neighbors.add(copy);
                    queue.add(aNeighbor);
                }else{
                    map.get(curr).neighbors.add(map.get(aNeighbor));
                }
            }
 
        }
        return newHead;
    }
}


### LeetCode Top 100 经典编程题目 LeetCode 上有许多经典的编程挑战,这些题目被广泛认为是掌握算法和数据结构的关键[^1]。以下是精选的一部分Top 100经典问题列表: #### 数组与字符串 1. **Two Sum** 2. **Add Two Numbers** 3. **Longest Substring Without Repeating Characters** #### 动态规划 4. **Climbing Stairs** 5. **Best Time to Buy and Sell Stock II** 6. **Unique Paths** #### 链表操作 7. **Merge Two Sorted Lists** 8. **Remove Nth Node From End of List** 9. **Reverse Linked List** #### 栈与队列 10. **Valid Parentheses** 11. **Min Stack** 12. **Implement Queue using Stacks** #### 排序与搜索 13. **Search Insert Position** 14. **Find First and Last Position of Element in Sorted Array** 15. **Sort Colors** #### 图论基础 16. **Clone Graph** 17. **Pacific Atlantic Water Flow** 18. **Number of Islands** #### 字符串处理 19. **String to Integer (atoi)** 20. **Valid Number** 21. **Decode Ways** #### 贪心算法 22. **Jump Game** 23. **Gas Station** 24. **Task Scheduler** 以上仅展示了部分LeetCode上被认为是经典的问题。对于完整的Top 100列表,建议访问官方推荐页面获取最新更新的信息。 ```python # 示例代码:验证括号的有效性 def isValid(s: str) -> bool: stack = [] mapping = {")": "(", "}": "{", "]": "["} for char in s: if char in mapping.values(): stack.append(char) elif char in mapping.keys(): if not stack or stack.pop() != mapping[char]: return False return len(stack) == 0 ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值