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