在Python中生成不相邻数字的最小数字的程序

在Python中生成不相邻数字的最小数字的程序

假设我们有一个具有四个可能字符“1”,“2”,“3”和“?”的字符串s。我们可以将“1”、“2”和“3”中的任何一个放置在“?”的位置上。我们必须找到我们可以制作的最小可能数字,以使任何两个相邻的数字都不相同。

因此,如果输入为s =“2?3?”,则输出将为21231。

要解决此问题,我们将按照以下步骤操作:

  • i:= 0
  • s:=来自s的元素的列表
  • 如果s的大小小于2,则
    • 如果s[i]与“?”相同,则
      • 返回“1”
  • 当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的项目组合成一个字符串并返回

例子

让我们看一下以下实现以更好地了解-

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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程