48-54 尝试每天两道题中 一道顺序 一道每日一题 遇到困难题可能是一道.
作者:互联网
48: 旋转图像
采用四边界的方法 我喜欢这个 代码写出来很清晰.
在四个边界上互换 换完就收缩四个边界
代码:
class Solution: def rotate(self, matrix: List[List[int]]) -> None: """ Do not return anything, modify matrix in-place instead. """ right= down = len(matrix)-1 left = top = 0 while left<right: for i in range(right-left): temp = matrix[top][left+i] matrix[top][left+i] = matrix[down-i][left] matrix[down-i][left] = matrix[down][right-i] matrix[down][right-i] = matrix[top+i][right] matrix[top+i][right] = temp left +=1 right-=1 top+=1 down-=1 return matrix 作者:yizhu-jia 链接:https://leetcode-cn.com/problems/rotate-image/solution/shang-xia-zuo-you-si-ge-bian-jie-de-shou-z0ym/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
49: 字母异位分词
击败98的人!!!
就是对每个字符串排序 排序的结果加入字典 并且用字典记录他在结果数组中的位置
如果之后字符串字典里有这个排序后的串 说明之前有和他一组的 在那个位置上加一个就行!!
一次通过 好耶!
class Solution: def groupAnagrams(self, strs: List[str]) -> List[List[str]]: rel = [] dict1 = {} i = 0 for eachstr in strs: sortedstr = ''.join(sorted(eachstr)) if sortedstr not in dict1: #如果这个字符串没出现过 加入结果 并用字典记录位置 dict1[sortedstr] = i rel.append([eachstr]) i = i + 1 else: #如果出现过 将原字符串加入结果对应位置 rel[dict1[sortedstr]].append(eachstr) return rel 作者:yizhu-jia 链接:https://leetcode-cn.com/problems/group-anagrams/solution/hao-ye-zi-ji-xiang-chu-lai-de-er-qie-da-nurlo/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
50: POW模拟
这题有个问题 python小数位数太长了 总是导致通不过 所以我i直接强制了
class Solution: def myPow(self, x: float, n: int) -> float: def apow(x,n): i = 1 y =x while i<n: y = y*y i = i*2 if i-n>0: y = y /apow(x,i-n) return y y = apow(x,n) y=format(y, '.5f') if y == 'nan': y = 0 return float(y) 作者:yizhu-jia 链接:https://leetcode-cn.com/problems/powx-n/solution/qiang-zhi-ba-nanbian-wei-0-by-yizhu-jia-ejpa/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
51:N皇后
: 普通的N皇后 普通的回溯
那天生病了 难受死了
class Solution: def solveNQueens(self, n: int) -> List[List[str]]: rel = [] cols = [-100 for i in range(n)] def isvalid(cols,currow,curcol): for i in range(0,currow): if cols[i] == curcol: return False for i in range(0,currow): m = i - currow #行差 n = cols[i] - curcol #列差 if m == n or m == -n: return False return True def dfs(row): if row == n: currel = [] for each in cols: currel.append('.'*each+'Q'+'.'*(n-1-each)) rel.append(currel) for col in range(n): if isvalid(cols,row,col): cols[row] = col dfs(row+1) cols[row] = -100 dfs(0) return rel 作者:yizhu-jia 链接:https://leetcode-cn.com/problems/n-queens/solution/pu-tong-de-nhuang-hou-pu-tong-de-hui-su-jciq6/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
52:
又见N皇后 代码我都懒得改
还是改改把 我怀疑自己得了新冠
这两道题能不放在一起吗?
class Solution: def totalNQueens(self, n: int) -> int: rel=0 cols = [-100 for i in range(n)] def isvalid(cols,currow,curcol): for i in range(0,currow): if cols[i] == curcol: return False for i in range(0,currow): m = i - currow #行差 n = cols[i] - curcol #列差 if m == n or m == -n: return False return True def dfs(row): nonlocal rel if row == n: rel+=1 for col in range(n): if isvalid(cols,row,col): cols[row] = col dfs(row+1) cols[row] = -100 dfs(0) return rel 作者:yizhu-jia 链接:https://leetcode-cn.com/problems/n-queens-ii/solution/-by-yizhu-jia-wv2g/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
54: 很久之前做过了
class Solution { public: int maxSubArray(vector<int>& nums) { int a=0; int b=nums[0]; int c=nums[0]; int n=nums.size(); for(int i=0;i<n;i++) { a=a+nums[i]; if(a>0) b=a; else { if (c > 0) b = 0; else b = a; a = 0; } if(b>c) c=b; } return c; } };
又用python做了一下 可是为啥结果被大部分人击败...
def maxSubArray(num): cursub = 0 maxsub = num[0] for each in num: cursub = cursub +each if cursub>0: temp = cursub #temp 记录当前可能大于maxsub的序列和 else: if maxsub>0: temp = 0 else: temp = cursub #记录下这个负数 因为这个负数也可能比maxsub大 cursub = 0 if temp > maxsub: #将潜在可能性和最大值比较了 maxsub = temp return maxsub
54:螺旋矩阵
老方法 我喜欢四面墙!!!!!!!堵住遍历的那个值 到头转向
class Solution: def spiralOrder(self, matrix: List[List[int]]) -> List[int]: rel = [] top = left = 0 n1 = len(matrix[0]) n2 = len(matrix) right = n1-1 down = n2-1 while len(rel) < n1*n2: for i in range(left,right+1): #第一行从左往右 rel.append(matrix[top][i]) top += 1 if len(rel) == n1*n2: break for i in range(top,down+1): #从上往下 rel.append(matrix[i][right]) right -= 1 if len(rel) == n1*n2: break for i in range(right,left-1,-1): #从右向左 rel.append(matrix[down][i]) down -= 1 if len(rel) == n1*n2: break for i in range(down,top-1,-1): #从下到上 rel.append(matrix[i][left]) left+=1 return rel 作者:yizhu-jia 链接:https://leetcode-cn.com/problems/spiral-matrix/solution/si-mian-qiang-du-zhu-wang-qian-de-bu-fa-l7tg6/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
这次送两道每日一题:
223 矩形面积:
就是在看他们的X重叠了多少 y重叠了多少
重叠记得单独计算 放在数轴上 固定最左边的 然后右边分情况
最后面积和减去重叠的就行
虽然被多数人击败 但至少是我自己做的
class Solution: def computeArea(self, ax1: int, ay1: int, ax2: int, ay2: int, bx1: int, by1: int, bx2: int, by2: int) -> int: def getrep(a2,b1,b2): #固定a1 看a2的相对位置有三种情况 if a2<b1: return 0 if a2 in range(b1,b2): return a2-b1 if a2 >= b2: return b2-b1 if ax1 <= bx1: xrep = getrep(ax2,bx1,bx2) 保证少的那个在最左边 else: xrep = getrep(bx2,ax1,ax2) if ay1 <= by1: yrep = getrep(ay2,by1,by2) else: yrep = getrep(by2,ay1,ay2) return (ax2-ax1)*(ay2-ay1)+(bx2-bx1)*(by2-by1)-xrep*yrep 作者:yizhu-jia 链接:https://leetcode-cn.com/problems/rectangle-area/solution/ha-ha-ha-ha-ha-ha-ha-ha-ha-yi-ci-cheng-w-1udu/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
1436 : 旅行终点站
找出口 入口和 出口肯定只出现过一次
用一个字典, 遍历站点 没见过就加入字典 见过就删除之前的,因为出现两次的肯定不是答案 。
最后剩一个入口一个出口用值区分它们
class Solution: def destCity(self, paths: List[List[str]]) -> str: dict1= {} for each in paths: if each[0] not in dict1 : #先看each[0] 没见过就加入 dict1[each[0]] = 0 else: #之前见过就删 del dict1[each[0]] if each[1] not in dict1: dict1[each[1]] = 1 else: del dict1[each[1]] for each in dict1: if dict1[each] == 1: #出口被赋的值是1 return each 作者:yizhu-jia 链接:https://leetcode-cn.com/problems/destination-city/solution/mei-xiang-dao-jie-guo-huan-bu-cuo-python-k1f6/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
标签:return,48,题中,int,cols,一道,rel,each,def 来源: https://www.cnblogs.com/xiaoli1996/p/15365934.html