Solving Leetcode Interviews in Seconds with AI: Sliding Puzzle
Introduction
In this blog post, we will explore how to solve the LeetCode problem "773" using AI. LeetCode is a popular platform for preparing for coding interviews, and with the help of AI tools like Chatmagic, we can generate solutions quickly and efficiently - helping you pass the interviews and get the job offer without having to study for months.
Problem Statement
On an 2 x 3 board, there are five tiles labeled from 1 to 5, and an empty square represented by 0. A move consists of choosing 0 and a 4-directionally adjacent number and swapping it. The state of the board is solved if and only if the board is [[1,2,3],[4,5,0]]. Given the puzzle board board, return the least number of moves required so that the state of the board is solved. If it is impossible for the state of the board to be solved, return -1. Example 1: Input: board = [[1,2,3],[4,0,5]] Output: 1 Explanation: Swap the 0 and the 5 in one move. Example 2: Input: board = [[1,2,3],[5,4,0]] Output: -1 Explanation: No number of moves will make the board solved. Example 3: Input: board = [[4,1,2],[5,0,3]] Output: 5 Explanation: 5 is the smallest number of moves that solves the board. An example path: After move 0: [[4,1,2],[5,0,3]] After move 1: [[4,1,2],[0,5,3]] After move 2: [[0,1,2],[4,5,3]] After move 3: [[1,0,2],[4,5,3]] After move 4: [[1,2,0],[4,5,3]] After move 5: [[1,2,3],[4,5,0]] Constraints: board.length == 2 board[i].length == 3 0 <= board[i][j] <= 5 Each value board[i][j] is unique.
Explanation
Here's the solution to the 2x3 sliding puzzle problem:
- State Space Search: Treat each board configuration as a state. Use Breadth-First Search (BFS) to explore possible states reachable from the initial board state.
- State Representation: Convert the 2x3 board into a string representation for efficient hashing and comparisons.
Goal State: The target state is represented by the string "123450".
Runtime Complexity: O(6!) - since there are 6! possible board states. Storage Complexity: O(6!) - to store the visited states and the queue.
Code
from collections import deque
def slidingPuzzle(board):
"""
Solves the 2x3 sliding puzzle using BFS.
Args:
board: A 2x3 list of lists representing the initial board state.
Returns:
The minimum number of moves to solve the puzzle, or -1 if unsolvable.
"""
start = ''.join(str(x) for row in board for x in row)
target = "123450"
if start == target:
return 0
q = deque([(start, 0)]) # (state, moves)
visited = {start}
# Possible moves (index of 0)
neighbors = {
0: [1, 3],
1: [0, 2, 4],
2: [1, 5],
3: [0, 4],
4: [1, 3, 5],
5: [2, 4]
}
while q:
state, moves = q.popleft()
zero_index = state.find('0')
for neighbor in neighbors[zero_index]:
new_state = list(state)
new_state[zero_index], new_state[neighbor] = new_state[neighbor], new_state[zero_index]
new_state = "".join(new_state)
if new_state == target:
return moves + 1
if new_state not in visited:
visited.add(new_state)
q.append((new_state, moves + 1))
return -1