六种对齐均为根据全体卡片的边界(或中心)计算目标线,再只改 x 或只改 y:
left/right/top/bottom:对齐到极值边缘;horizontal_center / vertical_center:先算包围盒中点(向下取整),再令 new = mid - size//2。width、height 不变,卡片顺序不变。
在画图类软件中,对齐功能是一个常见功能,用户可以将多个元素(如卡片)按照特定的对齐方式进行排列,以便实现整齐和美观的布局。该软件的画布视为直角坐标系,左上角为 (0, 0),如图所示:

现有一批卡片 cards,cards[i] = [x, y, width, height],其左上角坐标为 (x, y),宽、高分别是 width、height。请按指定的对齐方式 alignment 对齐,按输入顺序依次返回对齐后的卡片信息。alignment 取值仅为如下六种之一:
top:所有卡片向上垂直移动,顶部对齐到最上面卡片的顶部bottom:所有卡片向下垂直移动,底部对齐到最下面卡片的底部left:所有卡片向左水平移动,左边缘对齐到最左边卡片的左边缘right:所有卡片向右水平移动,右边缘对齐到最右边卡片的右边缘horizontal_center:所有卡片左右水平移动,居中对齐到水平中心
x1 与最右边卡片的右边缘 (x2 + width2) 的中点 MiddleX(即 (x1 + x2 + width2) / 2,向下取整)x + width / 2,向下取整)对齐到 MiddleXvertical_center:所有卡片上下垂直移动,居中对齐到垂直中心
y1 与最下面卡片的底部 (y2 + height2) 的中点 MiddleY(即 (y1 + y2 + height2) / 2,向下取整)y + height / 2,向下取整)对齐到 MiddleY第一个参数为 cards,1 <= cards.length <= 100,0 <= x, y < 1000,1 <= width, height <= 1000。
第二个参数是 alignment。
长度为 cards.length 的一个序列,元素顺序和 cards 相同,包含对齐后的卡片信息 [new_x, new_y, width, height]。
(本样例根据题面示意图中的「右对齐」构造。)
输入:
[[1, 1, 3, 2], [4, 2, 2, 2], [5, 5, 4, 2]]
"right"
输出:
[[6, 1, 3, 2], [7, 2, 2, 2], [5, 5, 4, 2]]
解释:
各卡片右边缘分别为 1+3=4、4+2=6、5+4=9,最右边缘为 9。
new_x + 3 = 9 → new_x = 6new_x + 2 = 9 → new_x = 7new_x + 4 = 9 → new_x = 5y、width、height 不变。
(本样例根据题面示意图中的「水平居中对齐」构造。)
输入:
[[1, 1, 3, 2], [4, 2, 2, 2], [5, 5, 4, 2]]
"horizontal_center"
输出:
[[4, 1, 3, 2], [4, 2, 2, 2], [3, 5, 4, 2]]
解释:
最左边缘 x1 = 1,最右边缘 x2 + width2 = 9,MiddleX = floor((1 + 9) / 2) = 5。
floor(new_x + 3/2) = 5 → new_x = 4floor(new_x + 2/2) = 5 → new_x = 4floor(new_x + 4/2) = 5 → new_x = 3
By signing up a CodeFun2000 universal account, you can submit code and join discussions in all online judging services provided by us.