当前位置: 面试刷题>> 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 示例代码 ```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 示例代码 ```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 示例代码 ```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); ``` 码小课网站中有更多相关内容分享给大家学习,涵盖了算法、数据结构、编程技巧等多个方面,欢迎访问学习。
推荐面试题