闲逛博客,发现一个google题目的讨论:
题目要求大致意思:
* 给定一个集合A=[0,1,3,8](该集合中的元素都是在0,9之间的数字,但未必全部包含),指定任意一个正整数K,请用A中的元素组成一个大于K的最小正整数。
* 比如,A=[1,0] K=21 那么输出结构应该为100
我没有看他们的解法,但我一看就觉得没有那么复杂。
其实就是构造一个整数,只有两种情况
1 位数一样的数,注意最后一位是否需要大于要比较的位
2 位数多一的数,直接从最小的取,排下来就可以
先设计一个函数从集合里面挑选数字就可以完成了
我的代码(未知是否存在bug,做的时候发现bug了):
<?
/*
http://www.aslibra.com
code by hqlulu
*/
$a=array(0,1,3,8,5);
$v=108749;
$result='';
asort($a);
//取数的功能,参数为三个 集合、数字、是否要大于
function get_greater($a,$num,$greater=true){
foreach($a as $v){
if($v>=$num && !$greater)return $v;
if($v>$num && $greater)return $v;
}
return false;
}
//转换为字符串
$v=''.$v;
$len=strlen($v);
//后面的位是否必须大于该数
$greater=true;
//找到和它同样长度的整数
for($i=0;$i<$len;$i++){
$compare= ($i>0 && !$greater) ? 0 :$v[$i];
$mygreater = $greater;
if($i<$len-1) $mygreater = false;
$tmp = get_greater($a, $compare, $mygreater);
if($tmp === false){
$result='';//返回false说明找不到合适的,复位结果
break;
}else if($tmp>$v[$i]){
$greater=false;
}
$result.=$tmp;
}
//结果为空则取多一位的数
if($result==''){
//每次取比0大的数就可以了,第一位不能等于0
for($i=0;$i<=$len;$i++){
$result.= $i==0 ? get_greater($a,0) : get_greater($a,0,false);
}
}
echo $v.' result:'.$result;
?>
原创内容如转载请注明:来自 阿权的书房
题目要求大致意思:
* 给定一个集合A=[0,1,3,8](该集合中的元素都是在0,9之间的数字,但未必全部包含),指定任意一个正整数K,请用A中的元素组成一个大于K的最小正整数。
* 比如,A=[1,0] K=21 那么输出结构应该为100
我没有看他们的解法,但我一看就觉得没有那么复杂。
其实就是构造一个整数,只有两种情况
1 位数一样的数,注意最后一位是否需要大于要比较的位
2 位数多一的数,直接从最小的取,排下来就可以
先设计一个函数从集合里面挑选数字就可以完成了
我的代码(未知是否存在bug,做的时候发现bug了):
<?
/*
http://www.aslibra.com
code by hqlulu
*/
$a=array(0,1,3,8,5);
$v=108749;
$result='';
asort($a);
//取数的功能,参数为三个 集合、数字、是否要大于
function get_greater($a,$num,$greater=true){
foreach($a as $v){
if($v>=$num && !$greater)return $v;
if($v>$num && $greater)return $v;
}
return false;
}
//转换为字符串
$v=''.$v;
$len=strlen($v);
//后面的位是否必须大于该数
$greater=true;
//找到和它同样长度的整数
for($i=0;$i<$len;$i++){
$compare= ($i>0 && !$greater) ? 0 :$v[$i];
$mygreater = $greater;
if($i<$len-1) $mygreater = false;
$tmp = get_greater($a, $compare, $mygreater);
if($tmp === false){
$result='';//返回false说明找不到合适的,复位结果
break;
}else if($tmp>$v[$i]){
$greater=false;
}
$result.=$tmp;
}
//结果为空则取多一位的数
if($result==''){
//每次取比0大的数就可以了,第一位不能等于0
for($i=0;$i<=$len;$i++){
$result.= $i==0 ? get_greater($a,0) : get_greater($a,0,false);
}
}
echo $v.' result:'.$result;
?>
原创内容如转载请注明:来自 阿权的书房
收藏本文到网摘
通过网络安装linux系统
Nginx日志记录cookie
