也有一段时间没写东西了,也总算有空了,老规矩,还是来道Leetcode算法题把
846:一手顺子
爱丽丝有一手(hand)由整数数组给定的牌。
现在她想把牌重新排列成组,使得每个组的大小都是 W,且由 W 张连续的牌组成。
如果她可以完成分组就返回 true,否则返回 false。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/hand-of-straights
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
题目比较简单,相信大家都看懂了,然后再说说解题思路把(思路既是步骤来):
1、首先这一组数据必须是W的倍数(len(hand)%W==0)
2、从这一组中找到最小的,然后找到其余W-1个,并判断这W-1个是否都在这个数组内(代码6-22行),满足则这一组放入new_list_1中
3、最后再判断最终的这个列表new_list_1里面存放的所有个数是否和一开始的数组相同,是的True,否则False
class Solution:
def isNStraightHand(self, hand: List[int], W: int):
new_list_1=[]
hand_1=hand.copy()
if len(hand)%W == 0:
for i in range(len(hand)//W):
new_list=[]
try:
min_number=min(hand)
except:
break
new_list.append(min_number)
hand.remove(min_number)
for i1 in range(1,W):
if min_number+i1 in hand:
hand.remove(min_number+i1)
new_list.append(min_number+i1)
if len(new_list)==W:
new_list_1.append(new_list)
else:
break
return False
if len(new_list_1)*W==len(hand_1):
return True
else:
return False
else:
return False
提交结果:
时间是慢了点,内存消耗还是看的过去的