移动所有球到每个盒子所需的最小操作数 两数相加 删除链表的倒数第 N 个结点 合并K个升序链表 两两交换链表中的节点
1769. 移动所有球到每个盒子所需的最小操作数
左右开工
while(left < ans.length) {
int cur = 0;
for(int i = left; i < ans.length; i++) {左向右
if(s[i] == '1') {
cur += i - left;
}
}
for(int i = left; i >= 0; i--) {右向左
if(s[i] == '1') {
cur += left - i;
}
}
ans[left] = cur;
left++;
}
2. 两数相加
ListNode root = new ListNode(0);
ListNode head = root;
int carry = 0;
while(l1 != null || l2 != null || carry != 0) {很妙
int l1Val = l1 != null ? l1.val : 0;
int l2Val = l2 != null ? l2.val : 0;
int sum = l1Val + l2Val + carry;
carry = sum / 10;注意细节
ListNode cur = new ListNode(sum % 10);
head.next = cur;
head = head.next;
if(l1 != null) l1 = l1.next;
if(l2 != null) l2 = l2.next;
}
return root.next;
19. 删除链表的倒数第 N 个结点
求一下链表长度,直接移动到要跳过的点的前方即可
23. 合并K个升序链表
关键就一个更新迭代
if(a == null || b == null) {注意跳出条件
return a != null ? a : b;
}
24. 两两交换链表中的节点
ListNode pre = new ListNode(0, head);
ListNode root = pre;
while(root.next != null && root.next.next != null) {注意判断和提出变量不要弄混
ListNode star = root.next;
ListNode end = root.next.next;
root.next = end;
star.next = end.next;
end.next = star;
root = star;
}
return pre.next;
浙公网安备 33010602011771号