202 Happy Number
- 没有对 重点是什么时候返回false 这个问题做出好的回答
- 这道题核心找少了,他说如果平方和不为1,就会产生循环,所以判定一个数不是happy数就看他是否存在循环。我这个方法有些投机取巧了,不是完整的,看下方链接中的思路。
- 循环的话按照快慢指针【题解】使用 “快慢指针” 思想,找出循环:“快指针” 每次走两步,“慢指针” 每次走一步,当二者相等时,即为一个循环周期。此时,判断是不是因为 1 引起的循环,是的话就是快乐数,否则不是快乐数。
class Solution {
public:
int SquareSum(int n){
//得到各个位并相加
int sum = 0;
while(n){
int x = n%10;
sum += x*x;
n/=10;
}
return sum;
}
bool isHappy(int n) {
//φ(゜▽゜*)♪数
//判断一个数n是否happy
//1. replace the number by the sum of the squares of its digits.
//直到它能够给出结果为1 那就是happy否则不happy
//contains --> 使用int足够
//当结果为个位数且此时他不为1 or 7(7是提交时报的错加进来的),就不可能是happy数,重点是什么时候返回false
while(n){
if(n/10 == 0){
if(n == 1 || n == 7){
return true;
}else{
return false;
}
}
n = SquareSum(n);
}
return 0;
}
};
//不愧是快乐数,我快乐了哈哈哈哈
36 Valid Sudoku
class Solution {
public:
bool SubCheck(int row, int col, vector<vector<char>>& board) {
vector<int> count(9, 0); // 在每次调用SubCheck时初始化count数组
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
char digit = board[row + i][col + j];
if (digit != '.') {
int index = digit - '0' - 1;
count[index]++;
if (count[index] > 1) return false;
}
}
}
return true;
}
bool isValidSudoku(vector<vector<char>>& board) {
//有效数独 in 9*9 size
//规则是:
//每一行&列 都必须有 数1-9 且不重复repetition
//每个3*3表格必须包含1-9 不重复 -->滑动窗口?
//note:
//部分填充的数独 可以是有效的但不一定是有解的
//仅填充数的格子需要按照上面的规则--->没有要求完成这个数独,不用填数
//所以这个题的中等难度体现在哪里???
for (int i = 0; i < 9; i++) {
vector<int> rowCount(9, 0);
vector<int> colCount(9, 0);
for (int j = 0; j < 9; j++) {
// 检查行
if (board[i][j] != '.') {
int index = board[i][j] - '0' - 1;
rowCount[index]++;
if (rowCount[index] > 1) return false;
}
// 检查列
if (board[j][i] != '.') {
int index = board[j][i] - '0' - 1;
colCount[index]++;
if (colCount[index] > 1) return false;
}
}
}
// 检查3x3格子
for (int row = 0; row < 9; row += 3) {
for (int col = 0; col < 9; col += 3) {
if (!SubCheck(row, col, board)) return false;
}
}
return true;
}
};