7.7摸鱼

1.第一题:
在这里插入图片描述
这道题看的官方思路,挺巧妙的。还是按照9*9将二维数组两次循环遍历完,在遍历的同时分别对行和列、宫做记录,判断行和列、宫是否出现了重复值,使用hashmap来保存,其中这个宫的划分使用box_index=(i//3)*3+j//3来划分为9个宫,这个比较巧妙。代码如下:

class Solution:    
	def isValidSudoku(self, board: List[List[str]]) -> bool:        
		rows=[{} for i in range(9)]        
		cols=[{} for i in range(9)]        
		boxes=[{} for i in range(9)
		for i in range(9):            
			for j in range(9):                
				num=board[i][j]                
				if num!='.':                    
					num=int(num)                    
					box_index=(i//3)*3+j//3                    
					rows[i][num]=rows[i].get(num,0)+1#0是若字典中不存在相应的值返回的默认值                    
					cols[j][num]=cols[j].get(num,0)+1                    
					boxes[box_index][num]=boxes[box_index].get(num,0)+1                    
					if rows[i][num]>1 or cols[j][num]>1 or boxes[box_index][num]>1:                        
						return False        
		return True

2.第二题:
在这里插入图片描述
代码如下:

class Solution:    
	def letterCombinations(self, digits: str) -> List[str]:        		
		dic={"2":"abc","3":"def","4":"ghi","5":"jkl","6":"mno","7":"pqrs","8":"tuv","9":"wxyz"}        
		ans=[]        
		for i in digits:            
		if ans:                
			temp=[]                
			for j in ans:                    
				for k in dic[i]:                        
					temp.append(j+k)                
			ans=temp#这样依次累积得到最终解            
		else:                
			for j in dic[i]:                    
				ans.append(j)        
		return ans
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值