以0,1,2,3,4,5,6,7,8,9组成一个数组,列出所有不重复的3个数的排列

以0,1,2,3,4,5,6,7,8,9组成一个数组,列出所有不重复的3个数的排列

如数组0,1,2,3 则排列为012,013,023,123这4个

/**
 * 计算结果
 *
 * @param array $arr [0, 1, 2, 3]
 * @param int $num 一维数组的长度-1
 * @param array $tmp 临时存储数据
 * @param bool $first 是否为第一次执行
 * @return array
 */
function calculation(array $arr, int $num, array $tmp = [], bool $first = false): array
{
    $data = [];

    foreach ($arr as $k => $v) {
        if ($first && count($arr) - 1 == $num) return array_merge($data, [$arr]);

        if (!$num) {
            array_push($data, array_merge($tmp, [$v]));
        } else {
            array_shift($arr);

            $data = array_merge($data, calculation($arr, $num - 1, array_merge($tmp, [$v])));
        }
    }

    return $data;
}

// 执行结果为 [0, 1, 2] [0, 1, 3] [0, 2, 3] [1, 2, 3]
calculation([0, 1, 2, 3], 2, [], true);
上一篇:Jenkins构建集成部署


下一篇:788. 逆序对的数量