一道简单的算法题 PHP

题目:输入一个整数,输出由该整数数字重新组成的下一个最大数。
例如输入12,输出下一个最大数是21;输入213,输出231

解题思路(也不知道对不对,望大佬指出):从最低位开始取值,与前面数一次比较,若发现低位数大于某高位数,进行调换,输出。

代码如下:

<?php

$num = 121;
// var_dump(substr($num,0,1));
// var_dump(strlen($num));
$flag1 = -1;  //需要对换的位数
$flag2 = -1;  //需要对换的位数
$len = strlen($num); //数字的长度

for($i=0; $i<$len; $i++){
	$end = intval(substr($num,$len-$i-1,1)); //从最低位依次获取
	for($j=0; $j<($len-$i-1); $j++){
		if($end > intval(substr($num,$len-$i-$j-2,1))){  //判断高位数字是否大于该位
			$flag1 = $len-$i-1;
			$flag2 = $len-$i-$j-2;
			break 2;    //跳出两层循环
		}
	}
}
// var_dump($flag1);
// var_dump($flag2);
//判断是否找到可对换位
if($flag1!= -1 && $flag1!= -1){
	//组成新数字
	$new_num = substr_replace($num,substr($num,$flag2,1),$flag1,1);

	$new_num = substr_replace($new_num,substr($num,$flag1,1),$flag2,1);

	var_dump($new_num);
}else{
	var_dump("该数已经是最大的了!");
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值