我已将此代码从java转换为php,但它会产生此错误:
未定义的偏移量
我已经尝试了很多可能性但无法解决它。
function calculate($bulbs, $floors){
//$T[][] = new int[$eggs+1][$floors+1];
$T=array();
$c=0;
for ( $i=0; $i <= $floors; $i++ ) {
$T[1][$i] = $i;
}
for ( $e = 2; $e <= $bulbs; $e++ ) {
for ( $f = 1; $f <=$floors; $f++ ) {
$T[$e][$f] = PHP_INT_MAX;
for ( $k = 1; $k <=$f ; $k++ ) {
$c = 1 + max( $T[$e-1][$k-1], $T[$e][$f-$k] );
if ( $c < $T[$e][$f] ) {
$T[$e][$f] = $c;
}
}
}
}
return $T[$bulbs][$floors];
}
echo calculate(2,100);
答案 0 :(得分:1)
错误就在这一行:
$c = 1 + max($T[$e-1][$k-1], $T[$e][$f-$k]);
当$ f等于$ k时会发生这种情况,因为它正在访问尚未设置的$ T [$ e] [0](假设我们设置$T[$e][$f] = PHP_INT_MAX;
且$ f从1开始) 。
可以使用array_key_exists()来检查元素是否存在:
if (array_key_exists($f - $k, $T[$e])) {
$c = 1 + max($T[$e-1][$k-1], $T[$e][$f-$k]);
}
else {
$c = 1 + $T[$e-1][$k-1];
}