classSolution: defcanMakeArithmeticProgression(self, arr: List[int]) -> bool: arr = sorted(arr) num = arr[1] - arr[0] pre = arr[1] for x in arr[2:]: if x - pre != num: returnFalse pre = x returnTrue
classSolution: defcal(self, arr): # 计算每一行为底的不同高度的矩形个数 # max_row为从左到右该点连续1的最大个数 max_row = [0] * len(arr) for i in range(len(arr)): if arr[i] == 0: max_row[i] = 0 else: max_row[i] = max_row[i-1] + 1 ans = 0 # 一次遍历k*l矩形的个数,l为矩形为底的长度,从1到n for l in range(1,len(arr)+1): for i, m_r in enumerate(max_row): if m_r < l: continue min_height = min(arr[i-l+1:i+1]) ans += min_height return ans
defnumSubmat(self, mat: List[List[int]]) -> int: m = len(mat) n = len(mat[0]) arr = [0] * n res = 0 for line in mat: for i in range(n): if line[i] == 0: arr[i] = 0 else: arr[i] += 1 res += self.cal(arr) return res
classSolution: defminInteger(self, num: str, k: int) -> str: if k > len(num) **2: return''.join(sorted(num)) num = list(num) for i in range(len(num)): if k > 0: max_l = min(k+1,len(num)-i) min_num = min(num[i:i+max_l]) if num[i] == min_num: continue index = num[i:i+max_l].index(min_num) + i tmp = num[i:index] num[i] = min_num num[i+1:index+1] = tmp k -= index - i else: break return''.join(num)