首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

日常做题

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

运行结果:

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180327G16SV000?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券