算法打卡第九天,今天你刷题了吗
😄😄😄😄😄😄😄😄😄😄
😃😃😃😃😃😃😃😃😃😃
💓💓💓大家一起来刷题!💓💓💓
😍😍😍😍😍😍😍😍😍😍
😘😘😘😘😘😘😘😘😘😘
17. 电话号码的字母组合
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
示例 1:
示例 2:
示例 3:
方法一:递归回溯
每次根据一个数字然后获得对应的一个字母,进行下一个数字,直到达到字符串长度.然后回溯尝试下一个相同数字对应不同的字母.
参考代码1
方法二:队列
思路:
- 先将输入的digits中的第一个数字对应的字母入队,假设此时队列中的元素个数为len.
- 然后出去一个元素和第二个数字对应的每一个字母组合然后入队…之后再出去一个元素和第二个数字对应的字母组合入队…之后再…
- 等待len个元素都进行过该操作,则进行下一个数字;直到遍历到digits的结尾.最后队列中的元素即为所求.
参考代码2
时间复杂度:
19. 删除链表的倒数第 N 个结点
给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。
进阶:你能尝试使用一趟扫描实现吗?
示例 1:
示例 2:
示例 3:
方法一
链表的基本使用:
- 逆向删除第n个节点,相当于正向删除第m = cnt-n+1个节点.
- 删除一个节点,则需要一个辅助指针指向当前节点的前一个节点.
- 如果当前只有一个节点,则直接进行删除(因为n>=1)
- 否则用辅助指针p找到m-1个节点.然后修改指针的指向:
p->next = p->next->next;
参考代码
方法二:
快慢指针
- 时间复杂度:O(L),其中 L是链表的长度。
- 空间复杂度:O(1)。
参考代码2
😜😜😜😜😜 大家卷起来! 😝😝😝😝😝