想象一个
m
∗
n
m*n
m∗n的矩阵,按行序,从
0
0
0行到
m
−
1
m-1
m−1行,首位相接放入一维数组
n
u
m
s
nums
nums,那么数组大小是
m
∗
n
m*n
m∗n。用
i
i
i表示数组的某个元素,数组和矩阵的映射关系是
m
a
t
r
i
x
[
i
/
c
o
l
u
m
n
]
[
i
%
c
o
l
u
m
n
]
=
n
u
m
s
[
i
]
matrix[i/column][i\%column]=nums[i]
matrix[i/column][i%column]=nums[i]
对于矩阵压缩得到的一维数组,数组的
i
i
i只和矩阵的列
c
o
l
u
m
n
column
column对应。
同理,我们也可以用矩阵
c
o
l
u
m
n
column
column得到对应数组的
i
i
i。
利用数组做中间使者,等价一下,两个矩阵也有列和列对应的关系。
知道列和列存在对应关系,看代码就行~
四、代码分析
理解思路很重要!
博主欢迎读者在评论区留言,作为日更博主,看到就会回复的。
五、AC
六、复杂度分析
时间复杂度:
O
(
m
∗
n
)
O(m*n)
O(m∗n) ,
m
a
t
mat
mat数组的大小=
m
∗
n
m*n
m∗n。一次遍历,通过
m
a
t
mat
mat建立
a
n
s
ans
ans的时间复杂度是
O
(
m
∗
n
)
O(m*n)
O(m∗n)。
空间复杂度:
O
(
1
)
O(1)
O(1),不考虑保存答案的矩阵,没有使用额外的线性空间,空间复杂度
O
(
1
)
O(1)
O(1)。