C++實現最多K次交換後獲得最大數字


在這個問題中,我們給定兩個整數n和k。我們的任務是 *透過最多進行K次交換來找到可能的最大數字*。

問題描述:我們需要計算在最多交換k個數字後產生的最大數字。

讓我們來看一個例子來理解這個問題,

輸入:n = 538 k = 1

輸出:835

解釋:

我們將交換8和5。

解決方案

為了解決這個問題,我們需要交換數字k次,並檢查生成的數字是否最大。

我們需要找到數字的最大位數,然後交換第一個索引的元素。以此類推,對數字的前k個索引執行此操作。

程式演示了我們解決方案的工作原理

示例

線上演示

#include <bits/stdc++.h>
using namespace std;

void calcMaxNumAfterSwap(string number, int k, string& maxString, int n){
   
   if (k == 0)
      return;
   for (int i = 0; i < n - 1; i++) {
      for (int j = i + 1; j < n; j++) {
         if (number[i] < number[j]) {
            swap(number[i], number[j]);
            if (number.compare(maxString) > 0)
               maxString = number;
            calcMaxNumAfterSwap(number, k - 1, maxString, n);
            swap(number[i], number[j]);
         }
      }
   }
}

int main(){
   
   string str = "15263";
   int k = 3;
   int size = str.length();
   string maxString = str;
   calcMaxNumAfterSwap(str, k, maxString, size);
   cout<<"The maximum number created after "<<k<<" swaps is "<<maxString;

   return 0;
}

輸出

The maximum number created after 3 swaps is 65321

更新於:2021年1月27日

594 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告