当前位置: 面试刷题>> k个空的位置 (经典算法题500道)


题目描述(补充后):

给定一个整数数组 nums,其中包含了 n 个非负整数,以及一个整数 k,表示有 k 个空的位置需要插入到数组中。这 k 个空位置可以插入到数组的任何位置(包括数组的开始和结束位置),并且这些空位置用 -1 表示。要求返回所有可能的插入结果,每个结果都是一个数组,其中包含 n+k 个元素,其中 n 个是原数组 nums 中的元素,k 个是新插入的 -1

注意:结果数组中的元素顺序不同视为不同的结果。

示例

输入:nums = [1, 2, 3], k = 2

输出:

[[-1, -1, 1, 2, 3],
 [-1, 1, -1, 2, 3],
 [-1, 1, 2, -1, 3],
 [-1, 1, 2, 3, -1],
 [1, -1, -1, 2, 3],
 [1, -1, 2, -1, 3],
 [1, -1, 2, 3, -1],
 [1, 2, -1, -1, 3],
 [1, 2, -1, 3, -1],
 [1, 2, 3, -1, -1]]

PHP 示例代码

function insertKIntoArray($nums, $k) {
    $result = [];
    backtrack($nums, $k, 0, [], $result);
    return $result;
}

function backtrack($nums, $k, $start, $current, &$result) {
    if ($k == 0) {
        $result[] = array_merge($current, $nums);
        return;
    }
    for ($i = 0; $i <= count($current) + $start; $i++) {
        $newCurrent = $current;
        array_splice($newCurrent, $i, 0, [-1]);
        backtrack($nums, $k - 1, $start + ($i > count($current) ? 1 : 0), $newCurrent, $result);
    }
}

// 示例用法
$nums = [1, 2, 3];
$k = 2;
$result = insertKIntoArray($nums, $k);
print_r($result);

Python 示例代码

def insertKIntoArray(nums, k):
    def backtrack(index, path):
        if k == 0:
            result.append(path + nums)
            return
        for i in range(len(path) + 1):
            backtrack(index + 1, path[:i] + [-1] + path[i:])

    result = []
    backtrack(0, [])
    return result

# 示例用法
nums = [1, 2, 3]
k = 2
result = insertKIntoArray(nums, k)
print(result)

JavaScript 示例代码

function insertKIntoArray(nums, k) {
    const result = [];

    function backtrack(index, path) {
        if (k === 0) {
            result.push([...path, ...nums]);
            return;
        }
        for (let i = 0; i <= path.length; i++) {
            const newPath = [...path.slice(0, i), -1, ...path.slice(i)];
            backtrack(index + 1, newPath);
        }
    }

    backtrack(0, []);
    return result;
}

// 示例用法
const nums = [1, 2, 3];
const k = 2;
const result = insertKIntoArray(nums, k);
console.log(result);

码小课网站中有更多相关内容分享给大家学习,涵盖了算法、数据结构、编程技巧等多个方面,欢迎访问学习。

推荐面试题