1.打表,prime列表是静态列表,详情可见我的学习记录(http://t.csdnimg.cn/aNuHL)。
class Solution:
# 打表
prime = []
for x in range(2,101):
flag = 1
if (x == 2) or (x == 3):
prime.append(x)
if (x % 6 != 1) and (x % 6 != 5):
continue
for i in range(5, int(x ** 0.5) + 1, 6):
if (x % i == 0) or (x % (i + 2) == 0):
flag = 0
break
if flag == 1:
prime.append(x)
def isThree(self, n: int) -> bool:
# 一个大于1的数至少有1和它本身能被除
# 则剩的那个除数m,要满足m*m = n,且m是素数
# 偶数除了4都不是恰好三个正除数
if n == 1:
return False
if n % 2 == 0: #偶数
if n == 4:
return True
else:
return False
if int(n ** 0.5) * int(n ** 0.5) != n:
return False
if int(n ** 0.5) in Solution.prime:
return True
return False
2.枚举,参考官方题解(. - 力扣(LeetCode)),代码如下:
class Solution:
def isThree(self, n: int) -> bool:
# 枚举
if n == 1:
return False
if n % 2 == 0: #偶数
if n == 4:
return True
else:
return False
cnt = 0
for i in range(1,int(n**0.5)+1):
if n % i == 0:
if i == n//i:
cnt += 1
else:
cnt += 2
return cnt == 3
模拟
class Solution:
def resultArray(self, nums: List[int]) -> List[int]:
# 模拟
arr1 = [nums[0]]
arr2 = [nums[1]]
for i in range(2,len(nums)):
if arr1[-1] > arr2[-1]:
arr1.append(nums[i])
else:
arr2.append(nums[i])
return arr1+arr2
1.遍历
class Solution:
def checkZeroOnes(self, s: str) -> bool:
# 遍历
cnt = [0]*2
ans = 1
cnt[int(s[0])] = 1
cnt[int(s[-1])] = 1
for i in range(1,len(s)):
if s[i-1] != s[i]:
ans = 1
else:
ans += 1
cnt[int(s[i-1])] = max(cnt[int(s[i-1])],ans)
return cnt[1] > cnt[0]
2.滑动窗口
class Solution:
def checkZeroOnes(self, s: str) -> bool:
# 滑动窗口
cnt = [0]*2
l = 0
for r in range(len(s)):
while s[r] != s[l]:
l += 1
# cnt[int(s[r])] = max(cnt[int(s[r])],r-l+1)
# 这样方便但是有点慢,代码1一样改法
if s[r] == '0':
cnt[0] = max(cnt[0],r-l+1)
else:
cnt[1] = max(cnt[1],r-l+1)
r += 1
return cnt[1] > cnt[0]
3.分组求解,方法来自灵神题解(. - 力扣(LeetCode))。
class Solution:
def checkZeroOnes(self, s: str) -> bool:
# 分组求解
m1,m0 = 0,0
n = len(s)
i = 0
while i < n:
st = i #记录连续开始坐标
v = s[st]
while i<n and s[i] == v:
i += 1
if v == '1':
m1 = max(m1,i-st)
else:
m0 = max(m0,i-st)
return m1 > m0
4.巧妙解法,来自评论(. - 力扣(LeetCode))。太妙了!!!
class Solution:
def checkZeroOnes(self, s: str) -> bool:
# 巧妙解法
return max([len(i) for i in s.split('0')]) > max([len(i) for i in s.split('1')])
完
感谢你看到这里!一起加油吧!