我有这个代码来生成字符串的所有posibilites
<?PHP
for($i=0;$i< 16;$i++){
echo decbin($i)."<br>";
}
?>
这将打印
0
1
10
11
100
101
110
111
1000
1001
1010
我想要的是将这些二进制数据与4个字母的字符串组合,用“*”替换所有的二进制数据 因此,当您输入字符串“help”时,您将获得
help
hel*
he*p
he**
等...
我在挣扎 任何想法都会受到赞赏吗?
由于
答案 0 :(得分:1)
警告:100%未经测试
$s='help';
$l = strlen($s)-1;
for($i=0;$i<=$len;$i++){
$bin=decbin($i);
$newS = $s;
foreach(str_split($bin) as $k=>$v) {
if ($v) {
$index = $l - $k;
$newS[$index] = '*';
}
}
echo $newS.'<br>';
}
答案 1 :(得分:1)
您可以为此问题编写一个简单的递归算法。
该算法的想法是你可以查看二进制数,并看到0
表示该字符将保持不变,1
表示它将变成星号。你每个角色都这样做,因为你有一个4个字符长的单词,你得到了2*2*2*2 = 16
个排列。
算法遍历单词中的字符,并且对于每个字符,它会尝试将其排列为正常字符和星号。结果是单词help
的所有排列,当每个字符都是自己的,或者用星号覆盖时。
function asterisk_permutations($str, &$result=array(), $i=0) {
if ($i >= strlen($str)) {
$result[] = $str;
return;
}
asterisk_permutations($str, $result, $i+1);
asterisk_permutations(substr_replace($str, '*', $i, 1), $result, $i+1);
}
asterisk_permutations("help", $result);
var_dump($result);
输出是:
array(16) {
[0]=> string(4) "help"
[1]=> string(4) "hel*"
[2]=> string(4) "he*p"
[3]=> string(4) "he**"
[4]=> string(4) "h*lp"
[5]=> string(4) "h*l*"
[6]=> string(4) "h**p"
[7]=> string(4) "h***"
[8]=> string(4) "*elp"
[9]=> string(4) "*el*"
[10]=> string(4) "*e*p"
[11]=> string(4) "*e**"
[12]=> string(4) "**lp"
[13]=> string(4) "**l*"
[14]=> string(4) "***p"
[15]=> string(4) "****"
}
答案 2 :(得分:0)
一个简单的方法是:
pad bincode so 0 =&gt; 0000
循环bincode,如果bincode [n] = 0,则用*替换word [n]。