我进行了一次求职面试,我遇到的问题是创建一个函数,该函数将返回通过使用某个集合中的数字生成数字的方式的数量,并且该集合中的任何数字都可以使用N次。
就像我有10个数字,我想找出使用[ 2,3,5 ]
10 种方法>要解决此问题,我做了以下功能:
function getNumberOfWays($money, $coins) {
static $level = 0;
if (!$level) {
sort($coins);
}
if ($level && !$money) {
return 1;
} elseif (!$level && !$money) {
return 0;
}
if ($money === 1 && array_search(1, $coins) !== false) {
return 1;
} elseif ($money === 1 && array_search(1, $coins) === false) {
return 0;
}
$r = 0;
$tmpCoins = $coins;
foreach ($coins as $index => $coin) {
if (!$coin || $coin > $money) {
continue;
}
$tmpCoins[$index] = 0;
$tmpMoney = $money;
do {
$tmpMoney -= $coin;
if ($tmpMoney >= 0) {
$level++;
$r += getNumberOfWays($tmpMoney, $tmpCoins);
$level--;
} elseif (!$tmpMoney) {
$r++;
}
} while ($tmpMoney >= 0);
}
return $r;
}
此函数可以正常工作并返回正确的值。 我的问题是是否有更好的方法。
谢谢