Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 5629fe8

Browse files
add new solutions
1 parent 47b71ed commit 5629fe8

File tree

51 files changed

+3468
-60
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

51 files changed

+3468
-60
lines changed
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
# 给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。
2+
#
3+
# 在 S 上反复执行重复项删除操作,直到无法继续删除。
4+
#
5+
# 在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。
6+
#
7+
#
8+
#
9+
# 示例:
10+
#
11+
# 输入:"abbaca"
12+
# 输出:"ca"
13+
# 解释:
14+
# 例如,在 "abbaca" 中,我们可以删除 "bb" 由于两字母相邻且相同,这是此时唯一可以执行删除操作的重复项。之后我们得到字符串 "aaca",其中又
15+
# 只有 "aa" 可以执行重复项删除操作,所以最后的字符串为 "ca"。
16+
#
17+
#
18+
#
19+
#
20+
# 提示:
21+
#
22+
#
23+
# 1 <= S.length <= 20000
24+
# S 仅由小写英文字母组成。
25+
#
26+
# Related Topics 栈 字符串
27+
# 👍 410 👎 0
28+
29+
30+
# leetcode submit region begin(Prohibit modification and deletion)
31+
class Solution:
32+
def removeDuplicates(self, s: str) -> str:
33+
stack = []
34+
for i in s:
35+
if stack and stack[-1]==i:
36+
stack.pop()
37+
else:
38+
stack.append(i)
39+
return ''.join(stack)
40+
# leetcode submit region end(Prohibit modification and deletion)

‎script/[130]被围绕的区域.py

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
# 给你一个 m x n 的矩阵 board ,由若干字符 'X' 和 'O' ,找到所有被 'X' 围绕的区域,并将这些区域里所有的 'O' 用 'X' 填充
2+
# 。
3+
#
4+
#
5+
#
6+
#
7+
# 示例 1:
8+
#
9+
#
10+
# 输入:board = [["X","X","X","X"],["X","O","O","X"],["X","X","O","X"],["X","O","X"
11+
# ,"X"]]
12+
# 输出:[["X","X","X","X"],["X","X","X","X"],["X","X","X","X"],["X","O","X","X"]]
13+
# 解释:被围绕的区间不会存在于边界上,换句话说,任何边界上的 'O' 都不会被填充为 'X'。 任何不在边界上,或不与边界上的 'O' 相连的 'O' 最终都
14+
# 会被填充为 'X'。如果两个元素在水平或垂直方向相邻,则称它们是"相连"的。
15+
#
16+
#
17+
# 示例 2:
18+
#
19+
#
20+
# 输入:board = [["X"]]
21+
# 输出:[["X"]]
22+
#
23+
#
24+
#
25+
#
26+
# 提示:
27+
#
28+
#
29+
# m == board.length
30+
# n == board[i].length
31+
# 1 <= m, n <= 200
32+
# board[i][j] 为 'X' 或 'O'
33+
#
34+
#
35+
#
36+
# Related Topics 深度优先搜索 广度优先搜索 并查集 数组 矩阵
37+
# 👍 830 👎 0
38+
39+
40+
# leetcode submit region begin(Prohibit modification and deletion)
41+
class Solution:
42+
def solve(self, board: List[List[str]]) -> None:
43+
"""
44+
Do not return anything, modify board in-place instead.
45+
"""
46+
nrow = len(board)
47+
ncol = len(board[0])
48+
stack = []
49+
for i in range(ncol):
50+
if board[0][i] == 'O':
51+
stack.append((0, i))
52+
if board[nrow - 1][i] == 'O':
53+
stack.append((nrow - 1, i))
54+
for i in range(nrow):
55+
if board[i][0] == 'O':
56+
stack.append((i, 0))
57+
if board[i][ncol - 1] == 'O':
58+
stack.append(((i, ncol - 1)))
59+
while stack:
60+
node = stack.pop()
61+
board[node[0]][node[1]] = 'M'
62+
for nr,nc in [(node[0]+1, node[1]),(node[0]-1,node[1]), (node[0],node[1]+1), (node[0],node[1]-1)]:
63+
if nr < nrow and nr>=0 and nc<ncol and nc>=0 and board[nr][nc]=='O':
64+
stack.append((nr,nc))
65+
66+
for i in range(nrow):
67+
for j in range(ncol):
68+
if board[i][j] =='M':
69+
board[i][j] = 'O'
70+
elif board[i][j]=='O':
71+
board[i][j] = 'X'
72+
# leetcode submit region end(Prohibit modification and deletion)
Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
# 给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。
2+
#
3+
# 构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成,其中每个新节点的值都设为其对应的原节点的值。新节点的 next 指针和 random
4+
# 指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。复制链表中的指针都不应指向原链表中的节点 。
5+
#
6+
# 例如,如果原链表中有 X 和 Y 两个节点,其中 X.random --> Y 。那么在复制链表中对应的两个节点 x 和 y ,同样有 x.random
7+
# --> y 。
8+
#
9+
# 返回复制链表的头节点。
10+
#
11+
# 用一个由 n 个节点组成的链表来表示输入/输出中的链表。每个节点用一个 [val, random_index] 表示:
12+
#
13+
#
14+
# val:一个表示 Node.val 的整数。
15+
# random_index:随机指针指向的节点索引(范围从 0 到 n-1);如果不指向任何节点,则为 null 。
16+
#
17+
#
18+
# 你的代码 只 接受原链表的头节点 head 作为传入参数。
19+
#
20+
#
21+
#
22+
# 示例 1:
23+
#
24+
#
25+
#
26+
#
27+
# 输入:head = [[7,null],[13,0],[11,4],[10,2],[1,0]]
28+
# 输出:[[7,null],[13,0],[11,4],[10,2],[1,0]]
29+
#
30+
#
31+
# 示例 2:
32+
#
33+
#
34+
#
35+
#
36+
# 输入:head = [[1,1],[2,1]]
37+
# 输出:[[1,1],[2,1]]
38+
#
39+
#
40+
# 示例 3:
41+
#
42+
#
43+
#
44+
#
45+
# 输入:head = [[3,null],[3,0],[3,null]]
46+
# 输出:[[3,null],[3,0],[3,null]]
47+
#
48+
#
49+
#
50+
#
51+
# 提示:
52+
#
53+
#
54+
# 0 <= n <= 1000
55+
# -104 <= Node.val <= 104
56+
# Node.random 为 null 或指向链表中的节点。
57+
#
58+
# Related Topics 哈希表 链表
59+
# 👍 944 👎 0
60+
61+
62+
# leetcode submit region begin(Prohibit modification and deletion)
63+
"""
64+
# Definition for a Node.
65+
class Node:
66+
def __init__(self, x: int, next: 'Node' = None, random: 'Node' = None):
67+
self.val = int(x)
68+
self.next = next
69+
self.random = random
70+
"""
71+
72+
class Solution:
73+
def copyRandomList(self, head: 'Optional[Node]') -> 'Optional[Node]':
74+
hash = dict()
75+
ptr = head
76+
while ptr:
77+
hash[ptr] = ListNode(ptr.val)
78+
ptr = ptr.next
79+
ptr = head
80+
hash[None] = None
81+
while ptr:
82+
hash[ptr].next = hash[ptr.next]
83+
hash[ptr].random = hash[ptr.random]
84+
ptr = ptr.next
85+
return hash[head]
86+
87+
88+
89+
# leetcode submit region end(Prohibit modification and deletion)

‎script/[141]环形链表.py

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
# 给你一个链表的头节点 head ,判断链表中是否有环。
2+
#
3+
# 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到
4+
# 链表中的位置(索引从 0 开始)。注意:pos 不作为参数进行传递 。仅仅是为了标识链表的实际情况。
5+
#
6+
# 如果链表中存在环 ,则返回 true 。 否则,返回 false 。
7+
#
8+
#
9+
#
10+
# 示例 1:
11+
#
12+
#
13+
#
14+
#
15+
# 输入:head = [3,2,0,-4], pos = 1
16+
# 输出:true
17+
# 解释:链表中有一个环,其尾部连接到第二个节点。
18+
#
19+
#
20+
# 示例 2:
21+
#
22+
#
23+
#
24+
#
25+
# 输入:head = [1,2], pos = 0
26+
# 输出:true
27+
# 解释:链表中有一个环,其尾部连接到第一个节点。
28+
#
29+
#
30+
# 示例 3:
31+
#
32+
#
33+
#
34+
#
35+
# 输入:head = [1], pos = -1
36+
# 输出:false
37+
# 解释:链表中没有环。
38+
#
39+
#
40+
#
41+
#
42+
# 提示:
43+
#
44+
#
45+
# 链表中节点的数目范围是 [0, 104]
46+
# -105 <= Node.val <= 105
47+
# pos 为 -1 或者链表中的一个 有效索引 。
48+
#
49+
#
50+
#
51+
#
52+
# 进阶:你能用 O(1)(即,常量)内存解决此问题吗?
53+
# Related Topics 哈希表 链表 双指针
54+
# 👍 1553 👎 0
55+
56+
57+
# leetcode submit region begin(Prohibit modification and deletion)
58+
# Definition for singly-linked list.
59+
# class ListNode:
60+
# def __init__(self, x):
61+
# self.val = x
62+
# self.next = None
63+
64+
class Solution:
65+
def hasCycle(self, head: Optional[ListNode]) -> bool:
66+
fast, slow = head, head
67+
while fast and fast.next:
68+
fast = fast.next.next
69+
slow = slow.next
70+
if slow==fast:
71+
return True
72+
return False
73+
74+
# leetcode submit region end(Prohibit modification and deletion)

‎script/[142]环形链表 II.py

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
# 给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。
2+
#
3+
# 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到
4+
# 链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。
5+
#
6+
# 不允许修改 链表。
7+
#
8+
#
9+
#
10+
#
11+
#
12+
13+
#
14+
# 示例 1:
15+
#
16+
#
17+
#
18+
#
19+
# 输入:head = [3,2,0,-4], pos = 1
20+
# 输出:返回索引为 1 的链表节点
21+
# 解释:链表中有一个环,其尾部连接到第二个节点。
22+
#
23+
#
24+
# 示例 2:
25+
#
26+
#
27+
#
28+
#
29+
# 输入:head = [1,2], pos = 0
30+
# 输出:返回索引为 0 的链表节点
31+
# 解释:链表中有一个环,其尾部连接到第一个节点。
32+
#
33+
#
34+
# 示例 3:
35+
#
36+
#
37+
#
38+
#
39+
# 输入:head = [1], pos = -1
40+
# 输出:返回 null
41+
# 解释:链表中没有环。
42+
#
43+
#
44+
#
45+
#
46+
# 提示:
47+
#
48+
#
49+
# 链表中节点的数目范围在范围 [0, 104] 内
50+
# -105 <= Node.val <= 105
51+
# pos 的值为 -1 或者链表中的一个有效索引
52+
#
53+
#
54+
#
55+
#
56+
# 进阶:你是否可以使用 O(1) 空间解决此题?
57+
# Related Topics 哈希表 链表 双指针
58+
# 👍 1685 👎 0
59+
60+
61+
# leetcode submit region begin(Prohibit modification and deletion)
62+
# Definition for singly-linked list.
63+
# class ListNode:
64+
# def __init__(self, x):
65+
# self.val = x
66+
# self.next = None
67+
68+
class Solution:
69+
def detectCycle(self, head: ListNode) -> ListNode:
70+
slow, fast = head,head
71+
while fast and fast.next:
72+
slow = slow.next
73+
fast = fast.next.next
74+
if slow == fast:
75+
fast = head
76+
while slow!=fast:
77+
slow = slow.next
78+
fast = fast.next
79+
return slow
80+
return None
81+
# leetcode submit region end(Prohibit modification and deletion)

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /