AI刷力扣
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
目录
本文给的都是AI作答的结果所有都是纯文本。
只给出AI在引导下给出的AC代码不能AC的就算了。
2. 两数相加
给你两个 非空 的链表表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的并且每个节点只能存储 一位 数字。
请你将两个数相加并以相同形式返回一个表示和的链表。
你可以假设除了数字 0 之外这两个数都不会以 0 开头。
示例 1
输入l1 = [2,4,3], l2 = [5,6,4]
输出[7,0,8]
解释342 + 465 = 807.
示例 2
输入l1 = [0], l2 = [0]
输出[0]
示例 3
输入l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
输出[8,9,9,9,0,0,0,1]
提示
每个链表中的节点数在范围 [1, 100] 内
0 <= Node.val <= 9
题目数据保证列表表示的数字不含前导零
填充c++代码
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
}
};
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode* dummy = new ListNode(0); // 创建一个虚拟头结点
ListNode* cur = dummy; // cur指向虚拟头结点
int carry = 0; // 进位
while (l1 || l2 || carry) { // 只要有一个链表不为空或者有进位就继续循环
int sum = (l1 ? l1->val : 0) + (l2 ? l2->val : 0) + carry; // 计算当前位的和
carry = sum / 10; // 计算进位
cur->next = new ListNode(sum % 10); // 创建新结点存储当前位的值
cur = cur->next; // cur指向新结点
if (l1) l1 = l1->next; // l1指向下一个结点
if (l2) l2 = l2->next; // l2指向下一个结点
}
return dummy->next; // 返回虚拟头结点的下一个结点
}
};
1091. 二进制矩阵中的最短路径
问
给你一个 n x n 的二进制矩阵 grid 中返回矩阵中最短 畅通路径 的长度。如果不存在这样的路径返回 -1 。
二进制矩阵中的 畅通路径 是一条从 左上角 单元格即(0, 0)到 右下角 单元格即(n - 1, n - 1)的路径该路径同时满足下述要求
路径途经的所有单元格的值都是 0 。
路径中所有相邻的单元格应当在 8 个方向之一 上连通即相邻两单元之间彼此不同且共享一条边或者一个角。
畅通路径的长度 是该路径途经的单元格总数。
示例 1
输入grid = [[0,1],[1,0]]
输出2
示例 2
输入grid = [[0,0,0],[1,1,0],[1,1,0]]
输出4
示例 3
输入grid = [[1,0,0],[1,1,0],[1,1,0]]
输出-1
提示
n == grid.length
n == grid[i].length
1 <= n <= 100
grid[i][j] 为 0 或 1
填充c++代码
class Solution {
public:
int shortestPathBinaryMatrix(vector<vector<int>>& grid) {
}
};
答
class Solution {
public:
int shortestPathBinaryMatrix(vector<vector<int>>& grid) {
int n = grid.size();
if (grid[0][0] == 1 || grid[n-1][n-1] == 1) {
return -1;
}
vector<vector<int>> dirs = {{-1,-1}, {-1,0}, {-1,1}, {0,-1}, {0,1}, {1,-1}, {1,0}, {1,1}};
queue<pair<int,int>> q;
q.push({0,0});
grid[0][0] = 1;
int steps = 1;
while (!q.empty()) {
int size = q.size();
for (int i = 0; i < size; i++) {
auto curr = q.front();
q.pop();
if (curr.first == n-1 && curr.second == n-1) {
return steps;
}
for (auto dir : dirs) {
int x = curr.first + dir[0];
int y = curr.second + dir[1];
if (x >= 0 && x < n && y >= 0 && y < n && grid[x][y] == 0) {
q.push({x,y});
grid[x][y] = 1;
}
}
}
steps++;
}
return -1;
}
};