第一题
遍历数组,如果矩阵对角线上的元素是 0或者矩阵中其他元素不是0,则返回false,否则则返回true
class Solution {
public:
bool checkXMatrix(vector<vector<int>>& grid) {
int n = grid.size();
int k = 0;
for(int i = 0 ; i < n ; i ++){
for(int j = 0 ; j < n ; j ++){
if(i == j || i + j == n - 1)
{
if(grid[i][j] == 0)k ++;
}
else
{
if(grid[i][j] != 0)k ++;
}
}
}
if(k == 0)return true;
else return false;
}
};
第二题
这题可以类比一下斐波那契数列和跳台阶。
在放置第n个房子时有两种选择,第n处如果放房子,则i-1处不能放房子,如果第n处不放房子时,则n-1可放房子。主要就递推,共(dp[n] * dp[n] ) 个放置房屋的方式数目,而dp[n] 则可由dp[n - 1] + dp[n - 2]递推得到。
class Solution {
public:
int countHousePlacements(int n) {
vector<long long> dp(n + 1);
dp[0] = 1;
dp[1] = 2;
int mod = 1e9 + 7;
for (int i = 2; i <= n; ++i) {
dp[i] = (dp[i - 1] + dp[i - 2]) % mod;
}
return (dp[n] * dp[n] ) % mod;
}
};