【每日刷题】Day21
🥕个人主页:开敲🍉
🔥所属专栏:每日刷题🍍
🌼文章目录🌼
2. LCR 027. 回文链表 - 力扣(LeetCode)
3. 面试题 02.05. 链表求和 - 力扣(LeetCode)
1. 73. 矩阵置零 - 力扣(LeetCode)
//思路:暴力求解。创建两个数组arr1、arr2,arr1数组用于存放0元素的x坐标,arr2数组用于存放0元素的y坐标。然后暴力遍历两个数组,定位原数组0元素的位置,将0元素所在行、列元素全部置为0
void setZeroes(int** matrix, int matrixSize, int* matrixColSize)
{
int arr1[201] = {0};//存放0元素x坐标
int arr2[201] = {0};//存放0元素y坐标
int num = 0;
for(int i = 0;i<matrixSize;i++)
{
for(int j = 0;j<(*matrixColSize);j++)
{
if(matrix[i][j]==0)
{
arr1[num] = i;
arr2[num] = j;
num++;
}
}
}
for(int i = 0;i<num;i++)
{
int x = arr1[i];
for(int tmp1 = 0;tmp1<(*matrixColSize);tmp1++)//将0元素所在行元素全部置为0
{
matrix[x][tmp1] = 0;
}
int y = arr2[i];
for(int tmp2 = 0;tmp2<matrixSize;tmp2++)//将0元素所在列元素全部置为0
{
matrix[tmp2][y] = 0;
}
}
}
2. LCR 027. 回文链表 - 力扣(LeetCode)
//思路:使用数组将链表中的值存储起来,然后使用两个指针从数组的两端遍历比较,大小不相等直接return false
typedef struct ListNode LN;
bool isPalindrome(struct ListNode* head)
{
int arr[100001];
int i = 0;
LN* pmove = head;
while(pmove)
{
arr[i++] = pmove->val;
pmove = pmove->next;
}
for(int j = 0;j<i/2;j++)
{
if(arr[j]!=arr[i-j-1])
{
return false;
}
}
return true;
}
3. 面试题 02.05. 链表求和 - 力扣(LeetCode)
//思路:这题和67. 二进制求和 - 力扣(LeetCode)非常相似,如果选择将两个链表的数求出来后再相加的话,就会面临数据过大导致无法存储的情况。那么这个时候我们可以和二进制求和这题一样,将每个位相加,使用一个变量来判断是否需要进1,将进的1带入下一个相加的位相加,以此类推。
typedef struct ListNode LN;
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2)
{
int flag = 0;
LN* pmove1 = l1;
LN* pmove2 = l2;
LN* newhead = (LN*)malloc(sizeof(LN));
LN* pmove = newhead;
while(pmove1||pmove2)
{
LN* newnode = (LN*)malloc(sizeof(LN));
int x = (pmove1)?pmove1->val:0;//获取链表1中节点的数据,这里使用这种方法是为了避免pmove1为NULL还对其进行解引用操作
int y = (pmove2)?pmove2->val:0;//获取链表2中节点的数据
newnode->val = (x+y+flag)%10;
newnode->next = NULL;
if(x+y+flag>=10)//如果需要进位,将flag置为1
{
flag = 1;
}
else
{
flag = 0;//否则,置为0
}
if(pmove1)//放置对空指针解引用
{
pmove1 = pmove1->next;
}
if(pmove2)//同上
{
pmove2 = pmove2->next;
}
pmove->next = newnode;
pmove = pmove->next;
}
if(flag)//如果出了循环以后flag还是1,则说明最后一位也进了1,这时候需要在新链表末尾多添上一个1
{
LN* newnode = (LN*)malloc(sizeof(LN));
newnode->val = 1;
newnode->next = NULL;
pmove->next = newnode;
}
return newhead->next;
}