在 Python 中使用相邻 k 次交换数字,查找可能的最小整数

在 Python 中使用相邻 k 次交换数字,查找可能的最小整数

假设我们有一个名为 num 的字符串,它代表一个非常大的整数,同时还有另一个名为 k 的值。我们最多可以交换任意两个相邻的数字 k 次。我们必须找到可以得到的最小值。

因此,如果输入是 num = “5432”,k = 4,则输出将是 2453,因为一开始数字是 5432。然后在第一轮后,它将变为 4532,然后是 4523,然后是 4253,最终是 2453。

为了解决这个问题,我们将按照以下步骤进行:

  • min_num:对 num 的数字进行排序

  • i:从 0 开始,to_find:0

  • 当 num 不同于 min_num 且 k > 0 且 i < num 的大小时,执行以下操作

    • indx:在 num 中从索引 i 开始查找要找的项

    • 当 indx 不等于 -1 时,执行以下操作

      • 如果 indx – i <= k,则

      • num:从索引 0 到 i-1 的 num 连接 num[indx] 连接 num 从索引 i 到 indx-1 的数量,连接 num 从索引 indx+1 到结尾

      • k:k – (indx – i)

      • i:i + 1

      • to_find:0

      • indx:在 num 中从索引 i 开始查找要找的项

      • 否则,

      • 退出循环

    • to_find:to_find + 1

  • 返回 num

示例

让我们看下面的实现,以便更好地理解

def solve(num, k):
   min_num = sorted(list(num))
   min_num = ''.join(min_num)
   i = 0
   to_find = 0
   while num != min_num and k > 0 and i < len(num):
      indx = num.find(str(to_find), i)
      while indx != -1:
         if indx - i <= k:
            num = num[:i] + num[indx] + num[i:indx] + num[indx+1:]
            k -= (indx - i)
            i += 1
            to_find = 0
            indx = num.find(str(to_find), i)
         else:
            break
      to_find += 1
   return num

num = "5432"
k = 4
print(solve(num, k))

输入

"5432", 4

输出

2453

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程