阿里笔试4.1
4.1 的场,考之前以为做完一道题提交了才能看第二题,所以第一题没通过就一直在死磕没来得及看第二题
第一题自测给出的样例和自己随便编了几个样例都是正确的,不明白为什么通过率是0
发出来思路各位指点一下到底错在哪里😭😭
题目:给一串二进制字符串如00011001,希望把他改为全为0,如果更改某个字符,那么他两边的字符也要更改,例如把第二位的0换成1,那么就变成了11111001.
如果无法变为全0,那么返回NO
以下是我的思路:
递归思想i=1~n-2,设立一个flag,flag=1表示之前的字符串s[0:i]为全零,flag=2表示s[i-1]=1,再之前的全为0,flag=0表示前方字符串除了最后一位还有其他的1无法更改
然后根据s[i]的值判断动作
n=int(input())
for i in range(n):
s=list(str(input()))
if len(s)==1:
if s=='1':
print(1)
else:
print(0)
continue
ls=len(s)
if s[0]=='0':
flag=1
else:
flag=2
j=1
num=0
while j<ls-1 and flag:
if flag==1:
if s[j]=='1':
flag=2
j=j+1
else:
if s[j]=='1':
num=num+1
if s[j+1]=='0':
s[j+1]='1'
else:
s[j+1]='0'
flag=1
j=j+1
else:
flag=0
break
if flag==1:
if s[ls-1]=='1':
flag=0
elif flag==2:
if s[ls-1]=='1':
flag=1
num=num+1
else:
flag=0
if flag==0:
print ('NO')
else:
print(num) 测试样例
2
01
011
输出
NO
1
以上代码测试是正确的,自己又编了几个10101输出NO,000111000输出1,都是测试正确的,不知道错在哪里了正确率为0.。。
#阿里笔试##阿里巴巴#
曼迪匹艾公司福利 121人发布
查看16道真题和解析