力扣2. 两数相加 C++代码
时间: 2024-01-24 22:16:59 浏览: 313
下面是 C++ 的代码实现,使用链表来存储数字,从低位到高位依次相加,注意进位和边界情况的处理:
```c++
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode* dummy = new ListNode(0);
ListNode* curr = dummy;
int carry = 0;
while (l1 || l2 || carry) {
int sum = carry + (l1 ? l1->val : 0) + (l2 ? l2->val : 0);
carry = sum / 10;
curr->next = new ListNode(sum % 10);
curr = curr->next;
l1 = l1 ? l1->next : l1;
l2 = l2 ? l2->next : l2;
}
return dummy->next;
}
};
```
相关问题
C++分治力扣162.寻找峰值
在LeetCode的162题中,题目名为"寻找峰值元素"(Find Peak Element)。这是一个二分查找问题,目标是在给定的数组`nums`中找到第一个峰值元素,即数组中的最大值(或者是最小值,取决于数组的特性),这个峰值元素满足左面的所有元素都小于它,右面的所有元素也都小于它。
C++中解决这个问题的基本思路是:
1. 首先,检查数组长度是否大于1,因为单个元素也可以视为峰值。
2. 然后,定义两个指针,`left`指向数组起始位置,`right`指向数组结束位置。
3. 通过循环,每次取中间元素`mid`,并比较左右两侧的元素。如果`nums[mid]`大于它的左侧元素(即`nums[mid] > nums[left]`),那么峰值可能在右半部分,所以将`left = mid + 1`;反之,如果小于右侧元素,则峰值可能在左半部分,更新`right = mid - 1`。
4. 当`left`和`right`相遇(或者相等),表示找到了峰值,返回`mid`作为结果。
5. 如果数组只有一个元素,或者`left >= right`,说明整个数组都是峰值(对于最小峰值而言),返回数组的第一个或最后一个元素。
下面是简单的C++代码实现:
```cpp
int findPeakElement(vector<int>& nums) {
if (nums.empty()) return 0;
int left = 0, right = nums.size() - 1;
while (left < right) {
int mid = left + (right - left) / 2;
if (nums[mid] > nums[mid + 1]) {
right = mid;
} else {
left = mid + 1;
}
}
return left;
}
```
力扣2469. 温度转换
力扣2469题目要求将摄氏度转换为开氏度和华氏度,并以数组的形式返回结果。其中开氏度等于摄氏度加上273.15,华氏度等于摄氏度乘以1.8再加上32。这道题的解法非常简单,只需要按照公式计算即可。时间复杂度和空间复杂度都是O(1)。下面是一个C++的解法:
```
class Solution {
public:
vector<double> convertTemperature(double celsius) {
return {celsius+273.15,celsius*1.8+32};
}
};
```
阅读全文