934. 开锁问题
把钥匙(编号-),把锁(编号-),当锁的号码能够被钥匙的号码整除的时候,该锁就可以被打开/关闭。最初所有的锁都是锁住的状态,然后用所有的钥匙去开所有的锁,返回有几把锁最后是打开的。
样例
给出 n = , m = , 返回 。
给出 n = , m = , 返回。
设置状态数组保存锁的状态,默认全0关闭,state[1]表示第一把锁,
state= [forxinrange(m +1)]
对每一把钥匙,检查能被其整除的锁的状态,0、1进行切换,
forkeyinrange(1,n+1):
forlockinrange(key,m+1,key):
state[lock] = state[lock]^1
最终数组中1的个数即为打开的锁的个数。
returnstate.count(1)
运行结果:
891. Valid Palindrome II
Given a non-empty string, you may delete at most one character. Judge whether you can make it a palindrome.
样例
Given s =return
Given s =return// delete
从头尾开始检查,如果头尾位置字符相同,继续检查中间的字符是否相同。
defvalidPalindrome(self,s):
# Write your code here
length =len(s)
left =
right = length -1
如果左右字符不同则跳出循环,相同则左右往中间移。
whileleft
if nots[left] == s[right]:
break
left +=1
right -=1
如果检查到了字符串中间位置,则该字符串是回文串,返回True。
否则从左右字符不相同的位置,检查左边跳过一个字符、或者右边跳过一个字符以后,子串是否为回文串。
ifleft >= right:
return True
returnself.validsubPalindrome(s,left,right -1)orself.validsubPalindrome(s,left +1,right)
检查子串是否为回文串,如果不是,直接返回False。
defvalidsubPalindrome(self,s,left,right):
whileleft
if nots[left] == s[right]:
return False
left +=1
right -=1
ifleft >= right:
return True
运行结果:
领取专属 10元无门槛券
私享最新 技术干货