用俄罗斯方块图形拼成3*3/4*4/5*5的正方形图案,列出所有可能性,如何用java代码实现?

请教各位大佬,用上图这些图案拼成3*3/4*4/5*5的正方形图案,列出所有可能性,如何用java代码实现?

示例:

4*4

3*3

这个感觉是一个数学问题,不是一个编程问题。 可以变为,给定 N*N 的正方形, 如何划分,让里面的子图形都属于几个基本图形?