本文主要是介绍Leetcode刷题笔记题解(C++):670. 最大交换,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
思路:
假设数字 9923676
从右边找最大的数字的下标maxindex,然后向左边寻找小于最大数字的数的下标,直到找到最左边,交换两者得出新的数字,比如从左到右递减的数字如9621则不需要变化,在寻找中记录这种数字
class Solution {
public:int maximumSwap(int num) {//转换为字符串string s = to_string(num);//取最右边的为初始最大值int n = s.length();int max_idx = n-1;//p,q来标记互换的下标,int p = -1,q;for(int i = n-2; i >= 0;i--){//左边有较大值if(s[i] > s[max_idx]){max_idx = i;}//遇到左边的值小于最大值,则标记一下最大值和最小值的下标else if(s[i] < s[max_idx]){p = i;q = max_idx;}}//p=-1说明从左到右是降序,则不需要交换if( -1 == p) return num;//交换位置得出结果swap(s[p],s[q]);return stoi(s);}
};
这篇关于Leetcode刷题笔记题解(C++):670. 最大交换的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!