题目链接
关于为什么将两个while换成for之后,内存开销减少了60%存疑
考虑之后把for循环去掉,提高代码可读性
· 注意都是0的情况要单独讨论,因为if dig_sum % part_sum中,part_sum不能为0
· 注意善用range和for的结合,比while更好
· 在py中用exit()退出,注意和C++的区别(这里要单独找时间学习一下)
代码如下:
# C. Vasya and Golden Ticket
n = int(input())
digits = list(input())
digits = list(map(int, digits))
dig_sum = sum(digits)
part_sum = 1
if dig_sum == 0:
print("YES\n")
exit()
# 由于数据量不大,因此枚举每一种可能的部分和
for part_sum in range(1, dig_sum): # 用for比 while代码量更小,占内存也更小
if dig_sum % part_sum != 0:
#part_sum += 1 这句不会影响part_sum的值!
continue
temp = 0 # 注意要置零!!
for i in range(0, n): # i就不需要再置零了,每次都会从range的第一个开始
temp += digits[i]
if temp == part_sum: # 这里不需要再开一个flag,直接用temp就很方便
temp = 0
elif temp > part_sum:
break
if temp == 0:
print("YES\n")
exit()
print("NO\n")