📅  最后修改于: 2023-12-03 15:10:05.977000             🧑  作者: Mango
在计算机科学领域中,寻找如何将一个问题分解成更小的问题是一种重要的思维方式。对于字符串拆分为素数的问题,我们可以使用递归的方式来解决。
def split_to_primes(s):
def is_prime(num):
if num <= 1:
return False
for i in range(2, int(num ** 0.5) + 1):
if num % i == 0:
return False
return True
def split_helper(s):
if not s:
return []
res = []
for i in range(1, len(s) + 1):
left, right = s[:i], s[i:]
if is_prime(int(left)) and is_prime(int(right)):
if not right:
res.append([int(left)])
else:
for p in split_helper(right):
res.append([int(left)] + p)
return res
return [p for p in split_helper(s)]
assert split_to_primes('113') == [[113]]
assert split_to_primes('3137') == [[3, 137], [31, 37], [313, 7]]
assert split_to_primes('7393993797') == [[7, 3, 939, 937, 97], [73, 93, 93, 797], [739, 3, 993, 797], [739, 39, 93, 797], [739, 399, 379, 7]]
由于每次都将原问题分解为两个子问题,因此问题的大小是以指数形势降低的,即时间复杂度为O(2^n),其中n是字符串s的长度。