请问如何算出一个一维数组内部元素所有可能的排列组合(去重)

1. 问题描述?

有一个数组如下:

$arr = [1,2,3,4]

2. 您期望得到的结果?

我希望得到:

[
 [1],
 [2],
 [3],
 [4],
 [1,2],
 [1,3],
 [1,4],
 [2,3],
 [2,4],
 [3,4],
 [1,2,3],
 [1,2,4],
 [1,3,4],
 [2,3,4],
 [1,2,3,4]
]
foobar
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
抄你码科技有限公司
最佳答案

搬运自:www.cnblogs.com/secretxinyu/p/5703...

改成你要的数组:

<?php
$arr = [1, 2, 3, 4];
/**
 * arrcom
 * @param array $arr
 * @return array
 */
function arrcom($arr)
{
    $num = count($arr);
    $total = pow(2, $num);
    $m = null;
    for ($i = 0; $i < $total; $i++) {
        for ($j = 0; $j < $num; $j++) {
            if (pow(2, $j) & $i) $m[] = $arr[$j];
        }
        if ($m) $array[] = $m;
        $m = null;
    }
    sort($array);
    return $array;
}

echo json_encode(arrcom($arr));
2年前 评论
讨论数量: 7
抄你码科技有限公司

leetcode?

2年前 评论
foobar (楼主) 2年前
抄你码科技有限公司

搬运自:www.cnblogs.com/secretxinyu/p/5703...

改成你要的数组:

<?php
$arr = [1, 2, 3, 4];
/**
 * arrcom
 * @param array $arr
 * @return array
 */
function arrcom($arr)
{
    $num = count($arr);
    $total = pow(2, $num);
    $m = null;
    for ($i = 0; $i < $total; $i++) {
        for ($j = 0; $j < $num; $j++) {
            if (pow(2, $j) & $i) $m[] = $arr[$j];
        }
        if ($m) $array[] = $m;
        $m = null;
    }
    sort($array);
    return $array;
}

echo json_encode(arrcom($arr));
2年前 评论
$arr = [1, 2, 3, 4];
$res = [[]];
for ($i = 0; $i < count($arr); $i++) {
    $res_count = count($res);
    for ($j = 0; $j < $res_count; $j++) {
        $res[] = [...$res[$j], $arr[$i]];
    }
}
var_dump($res);

思路就是$res之前的结果和$arr的每一项组成一个新的数组再放进$res中,这样反复循环就行了

这种方法会比结果多一个空数组,但这个值在计算的时候尤为重要

2年前 评论
抄你码科技有限公司 2年前
月亮☪ (作者) 2年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!