You are given two integer arrays nums1 and nums2, sorted in non-decreasing order, and two integers m and n, representing the number of elements in nums1 and nums2 respectively.
Mergenums1 and nums2 into a single array sorted in non-decreasing order.
The final sorted array should not be returned by the function, but instead be stored inside the arraynums1. To accommodate this, nums1 has a length of m + n, where the first m elements denote the elements that should be merged, and the last n elements are set to 0 and should be ignored. nums2 has a length of n.
Example 1:
<pre>Input: nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3
Output: [1,2,2,3,5,6]
Explanation: The arrays we are merging are [1,2,3] and [2,5,6].
The result of the merge is [<u>1</u>,<u>2</u>,2,<u>3</u>,5,6] with the underlined elements coming from nums1.
</pre>
Example 2:
<pre>Input: nums1 = [1], m = 1, nums2 = [], n = 0
Output: [1]
Explanation: The arrays we are merging are [1] and [].
The result of the merge is [1].
</pre>
Example 3:
<pre>Input: nums1 = [0], m = 0, nums2 = [1], n = 1
Output: [1]
Explanation: The arrays we are merging are [] and [1].
The result of the merge is [1].
Note that because m = 0, there are no elements in nums1. The 0 is only there to ensure the merge result can fit in nums1.
</pre>
defmerge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None: """ Do not return anything, modify nums1 in-place instead. """ i, j, k= m - 1, n - 1, len(nums1) - 1 while i >= 0or j >= 0: if i < 0or (j >= 0and nums1[i] < nums2[j]): nums1[k] = nums2[j] j -= 1 k -= 1 else: nums1[k] = nums1[i] i -= 1 k -= 1
算法II解题思路:
Python代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
defmerge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None: i, j, k = m - 1, n - 1, len(nums1) - 1 while i >= 0and j >= 0: if nums1[i] > nums2[j]: nums1[k] = nums1[i] k -= 1 i -= 1 else: nums1[k] = nums2[j] k -= 1 j -= 1 while i >= 0: nums1[k] = nums1[i] k -= 1 i -= 1 while j >= 0: nums1[k] = nums2[j] k -= 1 j -= 1
Write a program to solve a Sudoku puzzle by filling the empty cells.
A sudoku solution must satisfy all of the following rules:
Each of the digits 1-9 must occur exactly once in each row.
Each of the digits 1-9 must occur exactly once in each column.
Each of the digits 1-9 must occur exactly once in each of the 9 3x3 sub-boxes of the grid.
The '.' character indicates empty cells.
Example 1:
<pre>Input: board = [["5","3",".",".","7",".",".",".","."],["6",".",".","1","9","5",".",".","."],[".","9","8",".",".",".",".","6","."],["8",".",".",".","6",".",".",".","3"],["4",".",".","8",".","3",".",".","1"],["7",".",".",".","2",".",".",".","6"],[".","6",".",".",".",".","2","8","."],[".",".",".","4","1","9",".",".","5"],[".",".",".",".","8",".",".","7","9"]]
Output: [["5","3","4","6","7","8","9","1","2"],["6","7","2","1","9","5","3","4","8"],["1","9","8","3","4","2","5","6","7"],["8","5","9","7","6","1","4","2","3"],["4","2","6","8","5","3","7","9","1"],["7","1","3","9","2","4","8","5","6"],["9","6","1","5","3","7","2","8","4"],["2","8","7","4","1","9","6","3","5"],["3","4","5","2","8","6","1","7","9"]]
Explanation: The input board is shown above and the only valid solution is shown below:
</pre>
Constraints:
board.length == 9
board[i].length == 9
board[i][j] is a digit or '.'.
It is guaranteed that the input board has only one solution.
defisValidSudoku(self, board: List[List[str]]) -> bool: row_dict = [collections.defaultdict(int) for _ inrange(len(board))] col_dict = [collections.defaultdict(int) for _ inrange(len(board))] box_dict = [collections.defaultdict(int) for _ inrange(len(board))] for i inrange(len(board)): for j inrange(len(board[0])): if board[i][j] == '.': continue ifnotself.is_valid(i, j, board[i][j], row_dict, col_dict, box_dict): returnFalse row_dict[i][board[i][j]] = 1 col_dict[j][board[i][j]] = 1 box_dict[i // 3 * 3 + j // 3][board[i][j]] = 1 returnTrue
defis_valid(self, i, j, val, row_dict, col_dict, box_dict): if val in row_dict[i] or val in col_dict[j] or val in box_dict[i // 3 * 3 + j // 3]: returnFalse returnTrue