湖南益阳网站建设,义务网站建设,聚牛网站建设公司,西宁网站推广思路#xff1a;
假设数字 9923676
从右边找最大的数字的下标maxindex#xff0c;然后向左边寻找小于最大数字的数的下标#xff0c;直到找到最左边#xff0c;交换两者得出新的数字#xff0c;比如从左到右递减的数字如9621则不需要变化#xff0c;在寻找中记录这种数…
思路
假设数字 9923676
从右边找最大的数字的下标maxindex然后向左边寻找小于最大数字的数的下标直到找到最左边交换两者得出新的数字比如从左到右递减的数字如9621则不需要变化在寻找中记录这种数字
class Solution {
public:int maximumSwap(int num) {//转换为字符串string s to_string(num);//取最右边的为初始最大值int n s.length();int max_idx n-1;//pq来标记互换的下标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);}
};