477-82(236、61、47、74、240、93)

news/2024/11/28 9:22:32/

236. 二叉树的最近公共祖先

在这里插入图片描述

class Solution {
public:TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {if (root == p || root == q || root == nullptr)    return root;TreeNode* left = lowestCommonAncestor(root->left, p, q);TreeNode* right = lowestCommonAncestor(root->right, p, q);if (left != nullptr && right != nullptr)    return root;if (left != nullptr && right == nullptr)    return left;if (left == nullptr && right != nullptr)    return right;if (left == nullptr && right == nullptr)     return nullptr;return nullptr;}
};

在这里插入图片描述

61. 旋转链表

在这里插入图片描述

class Solution {
public:ListNode* rotateRight(ListNode* head, int k) {if (k == 0 || head == nullptr || head->next == nullptr){return head;}int n = 1;ListNode* cur = head;while (cur->next != nullptr){cur = cur->next;n++;}int add = n - k % n;if(add == n)    return head;ListNode* dummy = new ListNode(-1);dummy->next = head;cur = dummy;while (add--){cur = cur->next;}ListNode* cur2 = cur->next;cur->next = nullptr;ListNode* cur3 = cur2;while (cur2->next != nullptr){cur2 = cur2->next;}cur2->next = dummy->next;return cur3;}
};

在这里插入图片描述

47. 全排列 II

在这里插入图片描述

class Solution {
private:vector<int> path;vector<vector<int>> res;void backtracking(vector<int>& nums, vector<bool>& used){if (nums.size() == path.size()){res.push_back(path);return;}for (int i = 0; i < nums.size(); i++){if(i > 0 && nums[i] == nums[i-1] && used[i-1] == false){continue;}if(used[i] == false){used[i] = true;path.push_back(nums[i]);backtracking(nums, used);used[i] = false;path.pop_back();}}}public:vector<vector<int>> permuteUnique(vector<int>& nums) {res.clear();path.clear();sort(nums.begin(), nums.end());vector<bool> used(nums.size(), false);backtracking(nums, used);return res;}
};

在这里插入图片描述

74. 搜索二维矩阵

在这里插入图片描述

class Solution {
private:vector<int> path;vector<vector<int>> res;void backtracking(vector<int>& nums, vector<bool>& used){if (nums.size() == path.size()){res.push_back(path);return;}for (int i = 0; i < nums.size(); i++){if(i > 0 && nums[i] == nums[i-1] && used[i-1] == false){continue;}if(used[i] == false){used[i] = true;path.push_back(nums[i]);backtracking(nums, used);used[i] = false;path.pop_back();}}}public:vector<vector<int>> permuteUnique(vector<int>& nums) {res.clear();path.clear();sort(nums.begin(), nums.end());vector<bool> used(nums.size(), false);backtracking(nums, used);return res;}
};

在这里插入图片描述

240. 搜索二维矩阵 II

在这里插入图片描述

class Solution {
public:bool searchMatrix(vector<vector<int>>& matrix, int target) {int m = matrix.size();for (int i = 0; i < m; i++){int left = 0, right = matrix[0].size() - 1;while (left <= right){int mid = (left + right) >> 1;if (matrix[i][mid] > target){right = mid - 1;}else if (matrix[i][mid] < target){left = mid + 1;}else{return true;}}}return false;}
};

93. 复原 IP 地址

在这里插入图片描述

class Solution {
private:vector<string> res;void backtracking(string& s, int startIndex, int pointNum){if (pointNum == 3){if (isVaild(s, startIndex, s.size() - 1)){res.push_back(s);}return;}for (int i = startIndex; i < s.size(); i++){if (isVaild(s, startIndex, i))// 判断 [startIndex,i] 这个区间的子串是否合法{s.insert(s.begin() + i + 1, '.');// 在i的后面插入一个逗点pointNum++;backtracking(s, i + 2, pointNum);// 插入逗点之后下一个子串的起始位置为i+2pointNum--; // 回溯s.erase(s.begin() + i + 1);// 回溯删掉逗点}else{break;// 不合法,直接结束本层循环}}}//判断字符串s在左闭右闭的区间[start, end]所组成的数字是否合法bool isVaild(const string& s, int start, int end){if (start > end) return false;if (s[start] == '0' && start != end){return false;}int num = 0;for (int i = start; i <= end; i++){if (s[i] > '9' || s[i] < '0')// 遇到非数字字符不合法{return false;}num = num * 10 + s[i] - '0';if (num > 255){return false;}}return true;}public:vector<string> restoreIpAddresses(string s) {res.clear();if (s.size() < 4 || s.size() > 12)   return res;backtracking(s, 0, 0);return res;}
};

在这里插入图片描述


http://www.ppmy.cn/news/535635.html

相关文章

LeetCode 477 汉明距离总和

题目链接 两个整数的 汉明距离 指的是这两个数字的二进制数对应位不同的数量。 计算一个数组中&#xff0c;任意两个数之间汉明距离的总和。 示例: 输入: 4, 14, 2 输出: 6 解释: 在二进制表示中&#xff0c;4表示为0100&#xff0c;14表示为1110&#xff0c;2表示为0010。…

477. 汉明距离总和(中等,位运算)

題目&#xff1a; 分析1&#xff0c;统计每一位的1个数&#xff1a;T了。 class Solution:def totalHammingDistance(self, nums: List[int]) -> int:a len(nums) # 总个数if len(nums)0 :return 0a2 max(nums)c [0 for i in range(0,a2)]for i in nums:if i0:continues…

LeetCode笔记:477. Total Hamming Distance

问题&#xff1a; The Hamming distance between two integers is the number of positions at which the corresponding bits are different. Now your job is to find the total Hamming distance between all pairs of the given numbers. Example: Input: 4, 14, 2 Output:…

LeetCode 47

这个题是对上一个题的变形&#xff0c;变化的条件是数组里面可以出现相同的元素&#xff0c;这样确实加大了难度。不过在上个题的基础上我们可以把精力主要放在怎么处理重复的数字。如果没有记错&#xff0c;我们之前的一道题也是类似情况&#xff0c;我看了一下是 LeetCode 40…

4.17 一

现有一网络拓扑图如上 要求&#xff1a;①AR1 GE000口用接口DHCP分配IP ②AR1001口用全局DHCP分配IP ③各PC间互通 思路&#xff1a; ①想给PC1、2分配IP需要进入充当DHCP服务器的AR1的000端口配置IP&#xff0c;启用DHCP协议&#xff0c;配置接口地址池并调用。无需配置IP和…

【LeetCode】477. Total Hamming Distance 解题报告(Python C++)

作者&#xff1a; 负雪明烛 id&#xff1a; fuxuemingzhu 个人博客&#xff1a; http://fuxuemingzhu.cn/ 目录 题目描述题目大意解题方法位运算 日期 题目地址&#xff1a;https://leetcode.com/problems/total-hamming-distance/description/ 题目描述 The Hamming distanc…

【Leetcode】477. Total Hamming Distance

方法一&#xff1a; 思路&#xff1a; (1)遍历数组nums&#xff0c;对每一个nums[i]&#xff0c;求其余后面的每一个nums[j]的Hamming Distance。 (2)求x与y的Hamming Distance的方法&#xff1a; ---1)先求x^y的结果res。 ---2)再依次求32位res的每一位与1进行与操作的结…

Codeforces Round #477 C. Stairs and Elevators

Codeforces Round #477 C. Stairs and Elevators 题目链接 题意&#xff1a;给你一栋高n层&#xff0c;每一层由m个部分组成&#xff0c;可以看成是一个矩阵划分成行和列。给你一cl,ce分别表示有个楼梯和电梯&#xff0c;然后给你一个v表示电梯的速度。接下来行表示每个电梯…