给你一个下标从 0 开始、大小为 n x n
的整数矩阵 grid
,返回满足 Ri
行和 Cj
列相等的行列对 (Ri, Cj)
的数目。
如果行和列以相同的顺序包含相同的元素(即相等的数组),则认为二者是相等的。
输入:grid = [[3,2,1],[1,7,6],[2,7,7]] 输出:1 解释:存在一对相等行列对: - (第 2 行,第 1 列):[2,7,7]
输入:grid = [[3,1,2,2],[1,4,4,5],[2,4,2,2],[2,4,2,2]] 输出:3 解释:存在三对相等行列对: - (第 0 行,第 0 列):[3,1,2,2] - (第 2 行, 第 2 列):[2,4,2,2] - (第 3 行, 第 2 列):[2,4,2,2]
好吧,我就是无脑暴力专业户
- class Solution(object):
- def equalPairs(self, grid):
- """
- :type grid: List[List[int]]
- :rtype: int
- """
- num = 0
- for i in range(len(grid)):
- row_vector = grid[i]
- for j in range(len(grid)):
- col_vector = []
- for k in range(len(grid)):
- col_vector.append(grid[k][j])
- if row_vector == col_vector:
- num += 1
- return num
来自题解区大神,学习一下怎么用哈希表:
- class Solution:
- def equalPairs(self, grid: List[List[int]]) -> int:
- cnt = Counter(tuple(row) for row in grid)
- return sum(cnt[col] for col in zip(*grid))
tuple(row) for row in grid是生成器表达式用法,将二维矩阵的每一行转换成元组,配合Counter()函数,统计每个元组出现的次数。
zip(*grid)是二维矩阵转置的固定用法
cnt[col] for col in zip(*grid)将每一列作为键在cnt中查找该键对应出现的次数(值)
随后sum()求和
给你一个包含若干星号 *
的字符串 s
。
在一步操作中,你可以:
s
中的一个星号。返回移除 所有 星号之后的字符串。
注意:
输入:s = "leet**cod*e" 输出:"lecoe" 解释:从左到右执行移除操作: - 距离第 1 个星号最近的字符是 "leet**cod*e" 中的 't' ,s 变为 "lee*cod*e" 。 - 距离第 2 个星号最近的字符是 "lee*cod*e" 中的 'e' ,s 变为 "lecod*e" 。 - 距离第 3 个星号最近的字符是 "lecod*e" 中的 'd' ,s 变为 "lecoe" 。 不存在其他星号,返回 "lecoe" 。
属是有点过于简单了。。
- class Solution(object):
- def removeStars(self, s):
- """
- :type s: str
- :rtype: str
- """
- stack = []
- for i in range(len(s)):
- if s[i] == '*':
- stack.pop()
- else:
- stack.append(s[i])
- return ''.join(stack)
给定一个整数数组 asteroids
,表示在同一行的小行星。
对于数组中的每一个元素,其绝对值表示小行星的大小,正负表示小行星的移动方向(正表示向右移动,负表示向左移动)。每一颗小行星以相同的速度移动。
找出碰撞后剩下的所有小行星。碰撞规则:两个小行星相互碰撞,较小的小行星会爆炸。如果两颗小行星大小相同,则两颗小行星都会爆炸。两颗移动方向相同的小行星,永远不会发生碰撞。
示例 1:
输入:asteroids = [5,10,-5] 输出:[5,10] 解释:10 和 -5 碰撞后只剩下 10 。 5 和 10 永远不会发生碰撞。示例 2:
输入:asteroids = [8,-8] 输出:[] 解释:8 和 -8 碰撞后,两者都发生爆炸。示例 3:
输入:asteroids = [10,2,-5] 输出:[10] 解释:2 和 -5 发生碰撞后剩下 -5 。10 和 -5 发生碰撞后剩下 10 。
鬼知道我提交了多少次。。第一次忘记考虑碰撞方向
总感觉range()函数有坑,人为给迭代对象+1之后下次就不自增了(是真的,range循环中迭代对象的值改变不会影响循环次数)
- class Solution(object):
- def asteroidCollision(self, asteroids):
- """
- :type asteroids: List[int]
- :rtype: List[int]
- """
- # 碰撞完的数组要么全正 要么全负
- stack = []
- # for i in range(len(asteroids)):
- i = 0
- while i < len(asteroids):
- if not stack:
- stack.append(asteroids[i])
- i += 1
- continue
- while stack and i < len(asteroids) and stack[-1] * asteroids[i] < 0 and stack[-1] > asteroids[i]:
- if abs(stack[-1]) < abs(asteroids[i]):
- stack.pop()
- elif abs(stack[-1]) == abs(asteroids[i]):
- stack.pop()
- i += 1
- else:
- i += 1
- if i < len(asteroids):
- stack.append(asteroids[i])
- i += 1
- return stack