Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 5629fe8

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

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)