题目:输入一个整数,输出由该整数数字重新组成的下一个最大数。
例如输入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("该数已经是最大的了!");
}