目录
写在前面:
题目:67. 二进制求和 - 力扣(Leetcode)
解题思路:
代码:
过过过过过过啦!!!!
题目:83. 删除排序链表中的重复元素 - 力扣(Leetcode)
解题思路:
代码:
过过过过过过啦!!!!
写在最后:
写在前面:
无论是你学习累了,还是情绪低落,还是生活不如意,哪怕是失恋了,跟我一起,放下生活的
担,打开LeetCode,点开题库,选择简单题,快点这个链接,和我一起享受刷题的快乐!
题目:67. 二进制求和 - 力扣(Leetcode)
解题思路:
这道题目其实就是,让我们用代码去模拟二进制的运算,
那我们就想一想二进制该咋算,
根据小学数学学的知识,要从左往右计算两数相加,
当每一位相加的值大于进制,那就进位,
为了防止因为两个二进制的大小不同,导致相加的时候一个数加完了,
另一个还没加完,
1. 我们首先计算两数长度,将小的那个数往前补零,让两个数等长
2. 然后从左往右相加,如果相加值需要进位那就进位即可
下面是代码:
代码:
class Solution {
public:
string addBinary(string a, string b) {
//计算他们的长度
int alen = a.size();
int blen = b.size();
//在短的字符串前补零,让他们等长,之后好比较计算
while(alen < blen)
{
a = '0' + a;
alen++;
}
while(alen > blen)
{
b = '0' + b;
blen++;
}
//从后往前遍历字符串,并相加进位
for(int j = a.size() - 1; j > 0; j--)
{
a[j] = a[j] - '0' + b[j];
if(a[j] > '1')
{
a[j] = (a[j] - '0') % 2 + '0';
a[j - 1] = a[j - 1] + 1;
}
}
//字符串第零位单独操作,相加
a[0] = a[0] - '0' + b[0];
//进位
if(a[0] > '1')
{
a[0] = (a[0] - '0') % 2 + '0';
a = '1' + a;
}
return a;
}
};
过过过过过过啦!!!!
题目:83. 删除排序链表中的重复元素 - 力扣(Leetcode)
解题思路:
那么这道题啊,就是删除链表的重复项,
那么对于一个简单题来说,
我建议是不要带脑子,
我们直接无脑遍历链表,然后把出现过的数组成一个新链表就行,
因为题目说这是一个排序过的数组,所以重复的数字都是连在一起的,
只需要临时记录一下那个数字是否重复就能防止重复插入。
我个人更喜欢搞个哨兵位再尾插,你们带不带就看个人习惯了,
最后返回那个新链表的头就行。
下面是代码:
代码:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
//判断空链表
if(!head)
{
return nullptr;
}
//建一个哨兵位的头结点
ListNode* newhead = new ListNode;
//cur用来遍历原链表
ListNode* cur = head;
//先头插一个数据
newhead->next = cur;
//prev用来遍历新链表
ListNode* prev = cur;
//遍历原链表
while(cur)
{
//如果节点的值重复就继续遍历,如果不同就尾插进新链表
if(cur->val != prev->val)
{
prev->next = cur;
prev = prev->next;
}
cur = cur->next;
}
//尾结点指向空
prev->next = nullptr;
//换头(其实可以不换的啦)
head = newhead->next;
return head;
}
};
过过过过过过啦!!!!
写在最后:
以上就是本篇文章的内容了,感谢你的阅读。
如果喜欢本文的话,欢迎点赞和评论,写下你的见解。
如果想和我一起学习编程,不妨点个关注,我们一起学习,一同成长。
之后我还会输出更多高质量内容,欢迎收看。