1.有效数独
题目描述:
- 数字
1-9
在每一行只能出现一次。 - 数字
1-9
在每一列只能出现一次。 - 数字
1-9
在每一个以粗实线分隔的3x3
宫内只能出现一次。
分别用三个数组存储每一行每一列以及每一个小九宫格([i/3][j/3])中某数出现的次数
public:
bool isValidSudoku(vector<vector<char>>& board) {
int rows[9][9];
int columns[9][9];
int small[3][3][9];
memset(rows,0,sizeof(rows));
memset(columns,0,sizeof(columns));
memset(small,0,sizeof(small));
for(int i=0;i<9;i++){
for(int j=0;j<9;j++){
if(board[i][j]!='.'){
char c=board[i][j];
int index=c-'0'-1;
rows[i][index]++;
columns[j][index]++;
small[i/3][j/3][index]++;
if(rows[i][index]>1||columns[j][index]>1||small[i/3][j/3][index]>1){
return false;
}
}
}
}
return true;
}
2.矩阵置零:
给定一个m*n的矩阵,如果一个元素为0,则将其所在行和列的所有元素都设为0。
使用一个标记变量标记第一列元素中是否由0元素,在使用第一行第一列元素标记第一行是否含有0元素,再分别使用第一行和第一列的所元素标记所在行列之中是否含有0元素。因此首先遍历第一列元素得到第一个标记变量的值,再遍历第一行元素得到第二个标记变量,再遍历非第一行第一列元素修改第一行第一列,然后反过来使用这些标记变量修改矩阵的值。
public:
void setZeroes(vector<vector<int>>& matrix) {
int m = matrix.size();
int n = matrix[0].size();
int flag_col0 = false;
for (int i = 0; i < m; i++) {
if (!matrix[i][0]) {
flag_col0 = true;
}
for (int j = 1; j < n; j++) {
if (!matrix[i][j]) {
matrix[i][0] = matrix[0][j] = 0;
}
}
}
for (int i = m - 1; i >= 0; i--) {
for (int j = 1; j < n; j++) {
if (!matrix[i][0] || !matrix[0][j]) {
matrix[i][j] = 0;
}
}
if (flag_col0) {
matrix[i][0] = 0;
}
}
}
进阶:
3.矩阵快速幂
题目为斐波那契数:
1.递归(在进入到终止条件前一直在进栈,容易爆栈,因此不建议使用)
public:
int fib(int n) {
if(n==0)return 0;
else if(n==1)return 1;
else return fib(n-1)+fib(n-2);
}
2.滚动数组
此处贴出“第n个泰波那契数”的滚动数组代码,类似斐波那契数
public:
int tribonacci(int n) {
if(n==0)return 0;
else if(n<3)return 1;
int p=0,q=0,r=1,ans=1;
for(int i=3;i<=n;i++){
p=q;
q=r;
r=ans;
ans=p+q+r;
}
return ans;
}
3.矩阵快速幂(还没有完全弄懂,以后贴出)
4.重塑矩阵
给你一个由二维数组mat表示的m*n矩阵,以及两个正整数 r
和 c
,分别表示想要的重构的矩阵的行数和列数。(x/c,x%c)
public:
vector<vector<int>> matrixReshape(vector<vector<int>>& nums, int r, int c) {
int m = nums.size();
int n = nums[0].size();
if (m * n != r * c) {
return nums;
}
vector<vector<int>> ans(r, vector<int>(c));
for (int x = 0; x < m * n; ++x) {
ans[x / c][x % c] = nums[x / n][x % n];
}
return ans;
}
暂时记录这么多,以后遇上了再补充......