Python程式:構建沒有兩個相鄰數字相同的最小數字


假設我們有一個字串 s,其中包含四個可能的字元“1”,“2”,“3”和“?”。我們可以將“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",否則 s[i] := "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",否則 s[i] := "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

更新於: 2021年10月14日

281 次檢視

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.