670. 最大交换

  • 题目详述

670. 最大交换

给定一个非负整数,你至多可以交换一次数字中的任意两位。返回你能得到的最大值。

示例 1 :

输入: 2736

输出: 7236

解释: 交换数字2和数字7。

示例 2 :

输入: 9973

输出: 9973

解释: 不需要交换。

注意:

  1. 给定数字的范围是 [0, 108]

 

二.自我探寻(较慢)

思路:用一个list 把数分解了然后存进去,如98782,存进去是(倒序){

2,8,7,8,9}

然后从最高位开始 ,看它后面最大的值是否大于当前值,若大于,交换

不大于,到下一位。

代码:class Solution {

    public int maximumSwap(int num) {

         List<Integer> aIntegers=new ArrayList<Integer>();

           int f=num;

           while(f!=0)

           {

             int q=f%10;

             f=f/10;

             aIntegers.add(q);

           }

           for(int i=aIntegers.size()-1;i>=0;i--)

           {

             int max=0;

             int t=0;

             for(int j=i-1;j>=0;j--)

             {

                if(aIntegers.get(j)>=max)

                {

                   max=aIntegers.get(j);

                   t=j;

                }

             }

             if(max>aIntegers.get(i))

             {

                int a=aIntegers.get(i);

                aIntegers.set(t, a);

                aIntegers.set(i,max);

                break;

             }

           }

           int c=0;

           int n=1;

           for(int m=0;m<aIntegers.size();m++)

           {

             c=c+aIntegers.get(m)*n;

             n=n*10;

           }

           return c;

    }

}

评价:

 

 

 

三.网络学习过程

思路:1.将num直接转成字符串  Integer.toString(num)

  1. 将字符串转成字符数组Integer.toString(num).toCharArray();
  2. 用一个数组存取 每一位在数组中的位置(极大减少时间,不用每一位循环求后面的极大值)

代码:public static int maximumSwap(int num) {

           char[] a=Integer.toString(num).toCharArray();

           int[] last=new int[10];

           for(int i=0;i<a.length;i++)

           {

             last[a[i]-'0']=i;

           }

           for(int i=0;i<a.length;i++)

           {

             for(int k=9;k>a[i]-'0';k--)

             {

                if(last[k]>i)

                {

                   char tmp=a[i];

                   a[i]=a[last[k]];

                   a[last[k]]=tmp;

                   return Integer.valueOf(new String(a));

                  

                }

             }

           }

           return num;

    }

评价:

四.Python实现

 
 
 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值