在Python中生成不相邻数字的最小数字的程序
假设我们有一个具有四个可能字符“1”,“2”,“3”和“?”的字符串s。我们可以将“1”、“2”和“3”中的任何一个放置在“?”的位置上。我们必须找到我们可以制作的最小可能数字,以使任何两个相邻的数字都不相同。
因此,如果输入为s =“2?3?”,则输出将为21231。
要解决此问题,我们将按照以下步骤操作:
- i:= 0
- s:=来自s的元素的列表
- 如果s的大小小于2,则
- 如果s[i]与“?”相同,则
- 返回“1”
- 如果s[i]与“?”相同,则
- 当i小于s的大小时,做以下操作
- 如果s[i]与“?”相同,则
- 如果i等于0,则
- 当s[i + 1]不为“1”时,s[i]:=“1”,否则为“2”
- 否则当i> 0并且i <= s的大小-2时,则
- 如果s[i-1]等于“1”,则
- 如果s[i + 1]等于“2”,则
- s[i]:=“3”
- 否则,
- s[i]:=“2”
- 否则当s[i-1]等于“2”时,则
- 如果s[i + 1]等于“2”,则
- s[i]:=“3”
- 否则,
- s[i]:=“1”
- 否则当s[i-1]等于“3”时,则
- 如果s[i + 1]等于“2”,则
- s[i]:=“2”
- 否则,
- s[i]:=“1”
- 否则,
- 当s[i-1]不等于“1”时,s[i]:=“1”,否则为“2”
- i:= i + 1
- 如果s[i]与“?”相同,则
- 将s的项目组合成一个字符串并返回
例子
让我们看一下以下实现以更好地了解-
def solve(s):
i = 0
s = list(s)
if len(s) < 2:
if s[i] == "?":
return "1"
while i < len(s):
if s[i] == "?":
if i == 0:
s[i] = "1" if s[i + 1] != "1" else "2"
elif i > 0 and i <= len(s) - 2:
if s[i - 1] == "1":
if s[i + 1] =="2":
s[i] = "3"
else:
s[i] = "2"
elif s[i - 1] == "2":
if s[i + 1] == "1":
s[i] = "3"
else:
s[i] = "1"
elif s[i - 1] == "3":
if s[i + 1] == "1":
s[i] = "2"
else:
s[i] = "1"
else:
s[i] = "1" if s[i - 1] != "1" else "2"
i += 1
return "".join(s)
s = "2??3?"
print(solve(s))
输入
"2??3?"
输出
21231