zoukankan      html  css  js  c++  java
  • 670. Maximum Swap

    问题描述:

    Given a non-negative integer, you could swap two digits at most once to get the maximum valued number. Return the maximum valued number you could get.

    Example 1:

    Input: 2736
    Output: 7236
    Explanation: Swap the number 2 and the number 7.
    

    Example 2:

    Input: 9973
    Output: 9973
    Explanation: No swap.
    

    Note:

    1. The given number is in the range [0, 108]

    解题思路:

    要交换两个数字的来构成一个最大的数字,第一个想法就是交换高位的小数字a和低位的比这个小数字大最多的b。

    那我们就要找到这个数子右边的最大数字。

    可以首先将数字转换成字符串然后再用一个字符串存储该位置右边包含自己的最大数字。

    然后我们从原数字字符串的高位向低位开始遍历,找到一个位置,它右边包含自己的最大数字不是它自己。

    然后我们从低位向高位开始再遍历找这个数字:因为我们想把小的数字放在尽可能低的位置。

    代码:

    class Solution {
    public:
        int maximumSwap(int num) {
            string numStr = to_string(num), back = numStr;
            for(int i = back.size() - 2; i >= 0; i--){
                back[i] = max(back[i],back[i+1]);
            }
            for(int i = 0; i < numStr.size(); i++){
                if(numStr[i] == back[i])
                    continue;
                for(int j = numStr.size() - 1; j < numStr.size(); j--){
                    if(back[i] == numStr[j]){
                        swap(numStr[j], numStr[i]);
                        return stoi(numStr);
                    }
                }
            }
            return stoi(numStr);
        }
    };
  • 相关阅读:
    oracle字符集查看修改
    oracle查看所有表及字段
    oracle重新启动步骤
    oracle job 定时执行 存储过程
    oracle导入导出exp,imp
    oracle创建表空间
    Oracle Dataguard HA (主备,灾备)方案部署调试
    Moving Tables-贪心
    Windows下Android开发环境配置
    在单进程单线程或单进程多线程下实现log4cplus写日志并按大小切割
  • 原文地址:https://www.cnblogs.com/yaoyudadudu/p/9196895.html
Copyright © 2011-2022 走看看