”’
打印出100-1000所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。
例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。
”’
res=[]
for i in range(100,1000):
a=i//100
b=i//10-(i//100)*10
c=i%10
if a**3+b**3+c**3==i:
res.append(i)
print(res)
”’
颠倒一个字典的键值对
例如原来的字典是:{‘A’:’a’, ‘B’:’b’, ‘C’:’c’}
跌倒过来是{‘a’:’A’, ‘b’:’B’, ‘c’:’C’}
”’
d={'A':'a', 'B':'b', 'C':'c'}
L1=[]
L2=[]
for k,v in d.items():
L1.append(v)
L2.append(k)
print(dict(zip(L1,L2)))
”’
使用二分法来将一个数插入到一个已经升序的列表,遇到相等的数字,插入到其右边
例如:[1,4,7,11] 要插入2
结果:[1,2,4,11]
例如:[1,4,7,11] 要插入4.0
结果:[1,4,4.0,7,11] 遇到相等的插到其右边
ps:必须用二分法做出来,不能用Python自带的排序
”’
def insert_list(L,num):
'''
:param num:待插入的列表
:param num: 待插入的数字
:return: list[]
'''
p1,p2 = 0,len(L)-1 #边界值
while p1<=p2:
m = (p1+p2)//2 #中间值
if num#更新右边界
else:p1 = m+1 #更新左边界,因为要右插,所以+1 在(L[m]==num or L[m]
L.insert(p1,num)
return L
print(insert_list([1,4],4.0))
”’
判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。
数字 1-9 在每一行只能出现一次。
数字 1-9 在每一列只能出现一次。
数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。
请设计一个函数,来判断下面的M是否是一个有效的数独 是返回True 否返回False
其中没有数字的用”.”来表示的
”’
M = [
[“5”,”3”,”.”,”.”,”7”,”.”,”.”,”.”,”.”],
[“6”,”.”,”.”,”1”,”9”,”5”,”.”,”.”,”.”],
[“.”,”9”,”8”,”.”,”.”,”.”,”.”,”6”,”.”],
[“8”,”.”,”.”,”.”,”6”,”.”,”.”,”.”,”3”],
[“4”,”.”,”.”,”8”,”.”,”3”,”.”,”.”,”1”],
[“7”,”.”,”.”,”.”,”2”,”.”,”.”,”.”,”6”],
[“.”,”6”,”.”,”.”,”.”,”.”,”2”,”8”,”.”],
[“.”,”.”,”.”,”4”,”1”,”9”,”.”,”.”,”5”],
[“.”,”.”,”.”,”.”,”8”,”.”,”.”,”7”,”9”]
def isValidSudoku(board):
"""
:type board: List[List[str]]
:rtype: bool
"""
from math import ceil # 用于向上取整,把1-3 4-6 7-9按x/3 y/3向上取整得出1 2 3三类
D = {}
for i in range(1, 10):
for j in range(1, 10):
temp = board[i - 1][j - 1]
if temp != '.' and temp not in D:
D[temp] = [[i, j]]
elif temp != '.':
D[temp].append([i, j])
for k in D:
L = len(D[k])
setx, sety, setxy = set(), set(), set()
for it in D[k]:
setx.add(it[0])
sety.add(it[1])
setxy.add((ceil(it[0] / 3), ceil(it[1] / 3)))
if len(setx) != L or len(sety) != L or len(setxy) != L:
return False
return True
print(isValidSudoku(M))