一、介绍
Python itertools模块combinations(iterable, r)方法可以创建一个迭代器,返回iterable中所有长度为r的子序列,返回的子序列中的项按输入iterable中的顺序排序。
二、使用
from itertools import combinations
二、举例
c = (‘e’,‘f’,‘g’,‘h’) #对元组进行combinations排列组合
for j in combinations(c,2):
print (j)
##结果为:
ef
eg
eh
fg
fh
gh
三、注意
对于字典,combinations函数只对字典的键进行排列组合
举例:
e = {‘天时’:‘好’,‘地利’:‘差’} #对字典进行combinations排列组合
for i in combinations(e,2):
print (‘也要’.join(‘%s’%s for s in i),end=“,才行!”)
##结果为
天时也要地利,才行!
combinations函数只对非重复项进行遍历
例如存在集合y={“a”, “a”, “b”}
集合会自动去重
因此
for i in combinations(y,2):
print (‘’.join(‘%s’%p for p in i))
##结果为
ab
四、LeetCode关联题目解法
moves =[[0,0],[1,1],[0,1],[0,2],[1,0],[2,0]]
class Solution:
def tictactoe(self, moves: List[List[int]]) -> str:
# 3阶数独矩阵
SUDOKU=[[6,1,8],[7,5,3],[2,9,4]]
# 如果其中3数和为15就赢
if 15 in [sum(k) for k in combinations([SUDOKU[i][j] for i,j in moves[::2]], 3)]:return "A"
if 15 in [sum(k) for k in combinations([SUDOKU[i][j] for i,j in moves[1::2]], 3)]:return "B"
return "Draw" if len(moves)==9 else "Pending"
作者:INN
链接:https://leetcode.cn/problems/find-winner-on-a-tic-tac-toe-game/solutions/757544/jian-dan-si-xing-jie-99-shu-du-mo-fang-j-oo52/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。```
注意:“如果其中3数和为15就赢”,是一种常用的九宫格思路,背下即可
思路:
- for i,j in moves[::2]]和for i,j in moves[1::2]]分别找出A和B所走的位置对应的二维数组下标
- SUDOKU[i][j] 分别找出A和B所走的位置对应的SUDOKU中的数值
- combinations函数取出A和B所走的位置排列出来的所有长度为3的子序列
- sum(k)计算和是否为15