在 C++ 中使用最多一个交换操作的下一个更高的数字

在本教程中,我们将编写一个程序,该程序最多使用一次交换操作来查找下一个更高的数字。

给定一个数字n,交换该数字的任意两位数字,使结果数字大于数字n。如果不可能,则打印-1

让我们看看解决问题的步骤。

  • 如果数字的数字按降序排列,则无法形成数字。

  • 从数字的右边找出小于最后一位的数字的索引。

  • 找出大于前一个数字且小于所有数字的数字的索引。

  • 交换两位数并返回新号码。

示例

让我们看看代码。

#include <bits/stdc++.h>
using namespace std;
string getNextHigherNumber(string num) {
   int len = num.size();
   int firstDigitIndex = -1;
   for (int i = len - 2; i >= 0; i--) {
      if (num[i] < num[len - 1]) {
         firstDigitIndex = i;
         break;
      }
   }
   if (firstDigitIndex == -1) {
      return "-1";
   }
   int secondDigitIndex = -1;
   for (int i = len - 1; i > firstDigitIndex; i--) {
   if (num[i] > num[firstDigitIndex]) {
      if (secondDigitIndex == -1 || num[i] <= num[secondDigitIndex]) {
         secondDigitIndex = i;
         }
      }
   }
   char temp = num[firstDigitIndex];
   num[firstDigitIndex] = num[secondDigitIndex];
   num[secondDigitIndex] = temp;
   return num;
}

int main() {
   string num = "12345";
   cout << "给定号码: " << num << endl;
   cout << "下一个更高的数字: " << getNextHigherNumber(num) << endl;
   return 0;
}
输出结果

如果你运行上面的代码,那么你会得到下面的结果。

给定号码: 12345
下一个更高的数字: 12354

结论

如果您对本教程有任何疑问,请在评论部分提及。