php - 你能算出数字吗?我的代码输出正确但不被接受?
问题描述
我正在研究的问题是:
给你一个数组,代表你拥有的 0、1、2、...、9 的数量。该函数将如下所示:
can_build([#0s, #1s, #2s, ..., #9s], [num1, num2, ...])
如果您可以仅使用您拥有的数字构建以下数字,请编写一个返回 true 的函数。
例子:
canBuild([0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [3]) ➞ false
我基本上写道:
function canBuild($digits, $arr) {
if(array_unique($digits) === 0 && $arr === []) {
return true;
} elseif ($arr === [] && array_unique($digits) !== 0) {
return false;
}
$result = [];
$test = [];
for($i = 0; $i < count($arr); $i++) {
$test[$i] = str_split($arr[$i]);
}
$digit = array_unique($digits);
$results = [];
foreach($test as $k => $v) {
for($j = 0; $j < count($test[$k]); $j++) {
if(in_array($v[$j], $digit)) {
array_push($results, "true");
} else {
array_push($results, "false");
}
}
}
if(array_unique($results) === "true") {
return true;
} else {
return false;
}
}
canBuild([1, 1, 0, 0, 0, 0, 0, 0, 1, 0], [1, 80, 0]); // false
但由于某种原因,我不断收到:“CanBuildNumbersUsingDigits 测试失败:断言 false 为真失败。””有人能看出我的代码有什么问题吗?谢谢。
解决方案
查看您的代码:
array_unique($results) === "true"
和
array_unique($digits) !== 0
在语义上是不正确的。array_unique()
将返回一个数组类型的值,该值永远不会等于任何标量值或字符串,因为您正在进行严格的比较。
此外,您的代码不考虑数字计数,而是检查数组中是否存在数字计数。
解决方案:
要解决此问题,您只需遍历$arr
数字数组,str_split
将它们转换为单个字符(就像您所做的那样),并从$digits
. 如果任何数字计数恰好小于零,这意味着我们没有那么多的数字计数,我们返回,false
因为我们不能形成那个数字。如果一切顺利,我们true
最终会返回。
function canBuild($digits, $arr) {
foreach($arr as $num){
$chars = str_split($num);
foreach($chars as $char){
$digits[intval($char)]--;
if($digits[intval($char)] < 0) return false;
}
}
return true;
}
推荐阅读
- c++ - 使用 CMake 构建应用程序时,Catch2 测试不起作用
- reactjs - 如何在里面显示 HTMLTag
材质 UI 组件 - delphi - 寻求有关构建图形控件的最佳方法的建议
- woocommerce - 如何在 Woocommerce 中的用户登录之前隐藏几个产品页面?
- laravel-lighthouse - Laravel 灯塔无法在用户模型上使用授权
- reactjs - 如何在 React 中使用 @googlemaps/js-api-loader?
- topic-modeling - 如何在 R 中创建一个模型,该模型使用预定义的主题和一组新词上的某些词来确定与主题的相关性
- react-native - React Native App, Blackberry-Dynamics-React-Native-SDK中获取BB Dynamics授权用户邮箱
- laravel - Laravel 定义 belongsToMany 关系而不提供第二个参数
- webpack - '__WEBPACK_DEFAULT_EXPORT__' 在 nodmon 期间初始化之前