递归哥
zhangzhang653
有些人不是不在乎
关注数: 74
粉丝数: 44
发帖数: 531
关注贴吧数: 24
266. Palindrome Permutation【会员题】 题目描述:266. Palindrome Permutation 题目内容: 给定一个字符串,判断是否可以通过重新排列该字符串中的字符,使其成为一个回文串(Palindrome)。 回文串定义: 正读和反读都相同的字符串。例如 "madam"、"racecar"、"abba"、"a"、"" 都是回文串。 示例: • 示例 1: • 输入:"code" • 输出:false • 解释:无法通过重新排列字符使 "code" 成为回文串。 • 示例 2: • 输入:"aab" • 输出:true • 解释:可以重新排列为 "aba",这是一个回文串。 • 示例 3: • 输入:"carerac" • 输出:true • 解释:原字符串已经是回文串,或者可以重排为回文,如 "carerac" 本身就是回文的。 🎯 实现你的代码 public boolean canPermutePalindrome(String s) { } ```java public boolean canPermutePalindrome(String s) { // 使用 HashMap 来统计每个字符出现的次数 Map<Character, Integer> charCount = new HashMap<>(); // 遍历字符串,统计每个字符出现的次数 for (char c : s.toCharArray()) { charCount.put(c, charCount.getOrDefault(c, 0) + 1); } // 统计出现奇数次的字符的个数 int oddCount = 0; for (Map.Entry<Character, Integer> entry : charCount.entrySet()) { Integer value = entry.getValue(); if (value % 2 == 1) { oddCount += 1; } if (oddCount > 1) { return false; } } // 最终奇数次的字符数 <= 1,可以构成回文 return true; } ```
426. 将二叉搜索树转化为排序的双向链表 # 426. 将二叉搜索树转化为排序的双向链表 **难度**:中等 **相关标签**:树、二叉搜索树、双向链表、中序遍历、递归 ## 📌 题目描述(中文) 将一个二叉搜索树(BST)转换为一个排序的循环双向链表。要求不能创建任何新的节点,只能通过调整树中节点的指针来实现。 转换规则: - 树中每个节点的 `left` 指针调整为指向前驱节点(双向链表中的 `prev`) - 树中每个节点的 `right` 指针调整为指向后继节点(双向链表中的 `next`) - 最终返回链表中的第一个节点(即最小的节点) - 链表必须是循环的:第一个节点的 `left` 指向最后一个节点,最后一个节点的 `right` 指向第一个节点 必须通过**中序遍历**访问节点,仅调整原节点指针,不新建节点。 ## 代码框架 ```java /* // Definition for a Node. class Node { public int val; public Node left; public Node right; public Node() {} public Node(int _val) { val = _val; } public Node(int _val, Node _left, Node _right) { val = _val; left = _left; right = _right; } }; */ class Solution { public Node treeToDoublyList(Node root) { // 请在这里实现你的代码 } } ``` ## 📥 输入与 📤 输出 - **输入**:二叉搜索树(BST)的根节点 `root`(可能为空) - **输出**:转换后的循环双向链表的头节点(即最小值节点) ## 🧪 示例 1 **输入树结构**: ``` 4 / \ 2 5 / \ 1 3 ``` **中序遍历结果**:1 → 2 → 3 → 4 → 5 **转换后链表**:1 ↔ 2 ↔ 3 ↔ 4 ↔ 5(循环结构) - 节点 1 的 `left` 指向节点 5 - 节点 5 的 `right` 指向节点 1 **输出**:节点 1(最小值节点) ## ⚠️ 约束条件 - 树中节点数量范围:[0, 2000] - 节点值范围:-1000 ≤ Node.val ≤ 1000 - BST 特性:Node.left.val < Node.val < Node.right.val(无重复值) 解答如下 ```java Node pre = null; Node head = null; public Node treeToDoublyList(Node root) { this.pre = null; this.head = null; if (root == null) { return root; } dfs(root); // 连接头尾,形成循环链表 // 此时 pre 是最后一个节点(即最大值节点) head.left = pre; pre.right = head; return head; } private void dfs(Node node) { if (node == null) { return; } dfs(node.left); // 处理当前节点 if (pre == null) { // 如果 pre 为空,说明这是中序遍历的第一个节点(最小值节点) head = node; // 记录头节点 } else { // 否则,将前一个节点的 right 指向当前节点,当前节点的 left 指向前一个节点 pre.right = node; node.left = pre; } // 更新 pre 为当前节点 pre = node; dfs(node.right); } ```
户子的吧没有头像哦 来给户局 来个头像@吧主
有没有报名刷leetcode hot100的 15天刷1轮 有吗
复读求助? 亲戚大余中学毕业,没有考好,打算去复读。有什么地方可以复读?
没有过本科线 怎么办 文史类 没有过本科线,能不能读本科
为什么没有吧主 这个吧为什么没有吧主
题单 精选题单
leetcode吧吧主竞选:NO.0001号候选人
有人参加周赛的吗(菜鸡版) 只做周赛里面的中等里面的中等题。有一起参加的吗
尧化门附近有什么好玩的景点和好吃的 如题
要不要一起来讨论一下ft中文网里面的内容啊 要不要一起来讨论一下ft中文网里面的内容啊
宜春学院啥时候改名成大学啊 宜春学院啥时候改名成大学啊
你们都刷哪里的题目 你们都在什么oj平台刷题目啊😁
1
下一页