LintCode004:最大的交换

题目

1095. 最大的交换


给定一个非负整数,你可以交换两个数位至多一次来获得最大的合法的数。返回最大的合法的你能够获得的数。
样例
样例1:
输入: 2736
输出: 7236
解释: 交换数字2和数字7.
样例2:
输入: 9973
输出: 9973
解释: 不用交换.
注意事项
给定的数字在 [0, 10^8] 内。

解答

代码

public int maximumSwap(int num) {
		// Write your code here
		String str = new Integer(num).toString();
		char[] charArr = str.toCharArray();
		//获得数据位数
                int count = charArr.length;
		//确认需要交换的数
                int max = 0;
		int maxP = 0;
		for (int i = 0; i < count; i++) {
			max = 0;
			for (int j = count - 1; j >= i; j--) {
				int num1 = Character.getNumericValue(charArr[j]);
				if (max < num1) {
					max = num1;
					maxP = j;
				}
			}
			if (maxP != i) {
				break;
			}
		}
                //将交换数尽量往改为换
		char tempC;
		for (int i = 0; i < count; i++) {
			int num1 = Character.getNumericValue(charArr[i]);
			if (num1 < max && maxP > i) {
				tempC = charArr[i];
				charArr[i] = charArr[maxP];
				charArr[maxP] = tempC;
				break;
			}
		}
		return Integer.parseInt(new String(charArr));
	}

 


思路

我开始使用并没有使用char数组来存储,而是使用了%依次取出每个位上的数,但是最后失败了.

现在整理思路.获得数据位数,通过循环得到需要换的是那个数,通过循环从高位依次遍历,找到最合适的交换位置


注意

在寻找最优的交换数的时候,我们的第一个for负责的是,取得当前最高位的数值,第二个for负责的是,将随后的数与最高位的数比较,如果存在比最高位的数还大的数,我们就记录下这个数与数的位,并跳出随后的循环.

在后边的寻找最优的交换位置的地方,我们要保证两个点.

一是要从最高位开始,查找比我这个数要小的值,而是这个值的位,要在交换数之前

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值