《leetCode-php》求不重复数组的子集

现在有一个没有重复元素的整数集合S,求S的所有子集

思路:通过二进制来确定有哪些子集,动态规划的方式更好理解

<?php
function subset($arr) {
    $D[-1] = [[]];
    $num = count($arr);
    for ($i = 0; $i < $num ; $i ++) {
        $D[$i] = $D[$i - 1];
        $newSubset = [];
        foreach ($D[$i - 1] as $item) {
            $item[] = $arr[$i];
            $newSubset[] = $item;
        }
        $D[$i] = array_merge($D[$i], $newSubset);
    }
    return $D[$num - 1];
}
$arr = [1,2,3];
$ret = subset($arr);
print_r($ret);



function subsets($arr) {
    $num = count($arr);
    $end = pow(2, $num);
    $arrRet = array();
    for ($i = 0; $i < $end; $i ++) {
        $k = $i;
        $arrRet[$i] = array();
        for ($j = 0; $j < $num; $j ++) {
            $flag = $k % 2;
            if ($flag == 1) {
                $arrRet[$i][] = $arr[$j];
            }
            $k = intval($k / 2);
        }
    }
    print_r($arrRet);
}

发布了284 篇原创文章 · 获赞 32 · 访问量 49万+

猜你喜欢

转载自blog.csdn.net/less_cold/article/details/102530659