二进制求和
给你两个二进制字符串 a
和 b
,以二进制字符串的形式返回它们的和。
示例 1:
输入:a = "11", b = "1" 输出:"100"
示例 2:
输入:a = "1010", b = "1011" 输出:"10101"
提示:
1 <= a.length, b.length <= 104
a
和b
仅由字符'0'
或'1'
组成- 字符串如果不是
"0"
,就不含前导零
import random def two(a,b): a,b=int(a,2),int(b,2) c=str(bin(a+b)) return c[2:] if __name__=="__main__": a,b="0""0" for i in range(8): a+=str(random.randint(0,1)) b+=str(random.randint(0,1)) print(a,b,two(a,b))
全排列
给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。
示例 1:
输入:nums = [1,2,3]
输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]
示例 2:
输入:nums = [0,1]
输出:[[0,1],[1,0]]
示例 3:
输入:nums = [1]
输出:[[1]]
提示:
1 <= nums.length <= 6
-10 <= nums[i] <= 10
nums 中的所有整数 互不相同
import random def permute(nums): # 列表只有一个数字 if len(nums) == 1: return [nums] #列表有几个数字 permutations = [] for i, num in enumerate(nums):#遍历列表每一个索引i和数字num for p in permute(nums[:i] + nums[i+1:]):#获取除了当前数字num之外的数字全排列,通过递归把几个数字排列转化为一个数字排列 permutations.append([num] + p)#将当前数字 num 添加到子列表的每个全排列的前面,并将结果添加到 permutations 列表中 return permutations if __name__=="__main__": nums=[] for i in range(random.randint(0,10)): nums.append(i) print(nums)#输出原列表 print(permute(nums))#输出全排列
最大矩形
给定一个仅包含 0
和 1
、大小为 rows x cols
的二维二进制矩阵,找出只包含 1
的最大矩形,并返回其面积。
示例 1:
输入:matrix = [["1","0","1","0","0"],["1","0","1","1","1"],["1","1","1","1","1"],["1","0","0","1","0"]] 输出:6 解释:最大矩形如上图所示。
示例 2:
输入:matrix = [] 输出:0
示例 3:
输入:matrix = [["0"]] 输出:0
示例 4:
输入:matrix = [["1"]] 输出:1
示例 5:
输入:matrix = [["0","0"]] 输出:0
提示:
rows == matrix.length
cols == matrix[0].length
1 <= row, cols <= 200
matrix[i][j]
为'0'
或'1'
import random def maxrectangle(matrix):#在矩阵中求最大矩形 def largestRectangleArea(heights):#求直方图中的最大矩形面积 stack = []#初始化空栈 max_area = 0#初始面积为0 heights.append(0)#在高度数组最后放置极小的元素,使原数组中的所有元素都被考虑 for i in range(len(heights)): while stack and heights[i] < heights[stack[-1]]:#栈不为空且当前高度小于栈顶索引对应高度,得到右边界i h = heights[stack.pop()]#获取栈顶索引对应的高度 w = i if not stack else i - stack[-1] - 1#计算宽度。如果栈为空,那么宽度就是 i;否则宽度是 i - stack[-1] - 1。( stack[-1] 是当前条目的左边界。) max_area = max(max_area, h * w)#更新最大面积 stack.append(i)#栈用于存储索引 return max_area m, n = len(matrix), len(matrix[0])#m是矩阵行数,n是矩阵列数 heights = [0] * n #高度数组heights将用于存储每一列的连续1的高度 max_area = 0 for i in range(m):#遍历每行 for j in range(n):#遍历每列 if matrix[i][j]=='1':#如果第i行第j列是1,高度数组对应项加1 heights[j]+=1 else:#如果第i行第j列是0,高度数组重置为0 heights[j]=0 max_area = max(max_area, largestRectangleArea(heights))#更新最大面积 return max_area if __name__=='__main__': nums=[] num_matrix=[] x,y=random.randint(0,10),random.randint(0,5) for i in range(y): for k in range(x): nums.append(str(random.randint(0,1))) num_matrix.append(nums) nums=[] print(num_matrix) print(maxrectangle(num_matrix))
求直方图中最大矩形的方法:
https://www.cnblogs.com/GarrettWale/p/15796780.html
求矩阵中最大矩形的方法:
https://www.cnblogs.com/GarrettWale/p/15800968.html
为什么在矩阵中求最大矩形可以引用直方图求最大矩形的方法?