Tiling a Rectangle with the Fewest Squares - Problem
Tiling a Rectangle with the Fewest Squares

You're given a rectangle of dimensions n × m and need to completely tile it using the minimum number of integer-sided squares. Each square can have any integer side length, and squares can be of different sizes.

Goal: Find the minimum number of squares needed to perfectly tile the entire rectangle without gaps or overlaps.

Example: A 2×3 rectangle can be tiled with 3 squares: one 2×2 square and two 1×1 squares.

This is a classic optimization problem that requires exploring different ways to partition the rectangle and finding the most efficient tiling pattern.

Input & Output

example_1.py — Small Rectangle
$ Input: n = 2, m = 3
Output: 3
💡 Note: We can tile a 2×3 rectangle with 3 squares: one 2×2 square and two 1×1 squares. This is optimal as we cannot do better than 3 squares.
example_2.py — Square Input
$ Input: n = 5, m = 5
Output: 1
💡 Note: When the rectangle is already a square (5×5), we only need 1 square to tile it completely.
example_3.py — Complex Case
$ Input: n = 11, m = 13
Output: 6
💡 Note: This is a challenging case that requires careful optimization. The optimal tiling uses 6 squares of various sizes arranged efficiently.

Constraints

  • 1 ≤ n, m ≤ 13
  • The rectangle dimensions are positive integers
  • You must tile the entire rectangle without gaps or overlaps

Visualization

Tap to expand
Target Rectangle5×53×32×22×23×3Remaining 1×1 squaresAlgorithm Steps:1. Track column heights [skyline]2. Find leftmost minimum height3. Try squares of all valid sizes4. Recursively solve sub-problems5. Cache results for efficiencyTime ComplexityO(n²×m²×2^(n+m))Exponential but manageablefor small inputs (n,m ≤ 13)
Understanding the Visualization
1
Initialize Skyline
Start with all column heights at 0, representing empty rectangle
2
Find Placement
Find leftmost position with minimum height for next square
3
Try Square Sizes
Attempt squares of all valid sizes at this position
4
Update and Recurse
Update skyline heights and recursively solve remaining area
5
Cache Results
Store minimum squares needed for each skyline configuration
Key Takeaway
🎯 Key Insight: By tracking the skyline of placed squares and using memoization, we avoid recalculating the same configurations while systematically exploring all optimal placements.
Asked in
Google 12 Microsoft 8 Amazon 6 Meta 4
24.7K Views
Medium Frequency
~35 min Avg. Time
892 Likes
Ln 1, Col 1
Smart Actions
💡 Explanation
AI Ready
💡 Suggestion Tab to accept Esc to dismiss
// Output will appear here after running code
Code Editor Closed
Click the red button to reopen