两个蛋拼图未定义偏移在PHP中

时间:2016-12-25 06:08:12

标签: java php

我已将此代码从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);

Error detail 但我的回答是正确的,在这个例子中 14

1 个答案:

答案 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];
}