mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-09 03:34:02 +08:00
Merge branch 'youngyangyang04:master' into master
This commit is contained in:
@ -239,45 +239,54 @@ class Solution:
|
|||||||
|
|
||||||
javaScript
|
javaScript
|
||||||
|
|
||||||
```js
|
```javascript
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {number} n
|
* @param {number} n
|
||||||
* @return {number[][]}
|
* @return {number[][]}
|
||||||
*/
|
*/
|
||||||
var generateMatrix = function(n) {
|
var generateMatrix = function(n) {
|
||||||
// new Array(n).fill(new Array(n))
|
let startX = startY = 0; // 起始位置
|
||||||
// 使用fill --> 填充的是同一个数组地址
|
let loop = Math.floor(n/2); // 旋转圈数
|
||||||
const res = Array.from({length: n}).map(() => new Array(n));
|
let mid = Math.floor(n/2); // 中间位置
|
||||||
let loop = n >> 1, i = 0, //循环次数
|
let offset = 1; // 控制每一层填充元素个数
|
||||||
count = 1,
|
let count = 1; // 更新填充数字
|
||||||
startX = startY = 0; // 起始位置
|
let res = new Array(n).fill(0).map(() => new Array(n).fill(0));
|
||||||
while(++i <= loop) {
|
|
||||||
// 定义行列
|
while (loop--) {
|
||||||
let row = startX, column = startY;
|
let row = startX, col = startY;
|
||||||
// [ startY, n - i)
|
// 上行从左到右(左闭右开)
|
||||||
while(column < n - i) {
|
for (; col < startY + n - offset; col++) {
|
||||||
res[row][column++] = count++;
|
res[row][col] = count++;
|
||||||
}
|
}
|
||||||
// [ startX, n - i)
|
// 右列从上到下(左闭右开)
|
||||||
while(row < n - i) {
|
for (; row < startX + n - offset; row++) {
|
||||||
res[row++][column] = count++;
|
res[row][col] = count++;
|
||||||
}
|
}
|
||||||
// [n - i , startY)
|
// 下行从右到左(左闭右开)
|
||||||
while(column > startY) {
|
for (; col > startX; col--) {
|
||||||
res[row][column--] = count++;
|
res[row][col] = count++;
|
||||||
}
|
}
|
||||||
// [n - i , startX)
|
// 左列做下到上(左闭右开)
|
||||||
while(row > startX) {
|
for (; row > startY; row--) {
|
||||||
res[row--][column] = count++;
|
res[row][col] = count++;
|
||||||
}
|
}
|
||||||
startX = ++startY;
|
|
||||||
|
// 更新起始位置
|
||||||
|
startX++;
|
||||||
|
startY++;
|
||||||
|
|
||||||
|
// 更新offset
|
||||||
|
offset += 2;
|
||||||
}
|
}
|
||||||
if(n & 1) {
|
// 如果n为奇数的话,需要单独给矩阵最中间的位置赋值
|
||||||
res[startX][startY] = count;
|
if (n % 2 === 1) {
|
||||||
|
res[mid][mid] = count;
|
||||||
}
|
}
|
||||||
return res;
|
return res;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
Go:
|
Go:
|
||||||
|
@ -191,6 +191,30 @@ var isHappy = function(n) {
|
|||||||
}
|
}
|
||||||
return b === 1 || getN(b) === 1 ;
|
return b === 1 || getN(b) === 1 ;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// 方法三:使用Set()更简洁
|
||||||
|
/**
|
||||||
|
* @param {number} n
|
||||||
|
* @return {boolean}
|
||||||
|
*/
|
||||||
|
|
||||||
|
var getSum = function (n) {
|
||||||
|
let sum = 0;
|
||||||
|
while (n) {
|
||||||
|
sum += (n % 10) ** 2;
|
||||||
|
n = Math.floor(n/10);
|
||||||
|
}
|
||||||
|
return sum;
|
||||||
|
}
|
||||||
|
var isHappy = function(n) {
|
||||||
|
let set = new Set(); // Set() 里的数是惟一的
|
||||||
|
// 如果在循环中某个值重复出现,说明此时陷入死循环,也就说明这个值不是快乐数
|
||||||
|
while (n !== 1 && !set.has(n)) {
|
||||||
|
set.add(n);
|
||||||
|
n = getSum(n);
|
||||||
|
}
|
||||||
|
return n === 1;
|
||||||
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
Swift:
|
Swift:
|
||||||
|
@ -283,31 +283,46 @@ func search(nums []int, target int) int {
|
|||||||
|
|
||||||
// (版本一)左闭右闭区间
|
// (版本一)左闭右闭区间
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {number[]} nums
|
||||||
|
* @param {number} target
|
||||||
|
* @return {number}
|
||||||
|
*/
|
||||||
var search = function(nums, target) {
|
var search = function(nums, target) {
|
||||||
let l = 0, r = nums.length - 1;
|
let left = 0, right = nums.length;
|
||||||
// 区间 [l, r]
|
// 使用左闭右开区间 [left, right)
|
||||||
while(l <= r) {
|
while (left < right) {
|
||||||
let mid = (l + r) >> 1;
|
let mid = left + Math.floor((right - left)/2);
|
||||||
if(nums[mid] === target) return mid;
|
if (nums[mid] > target) {
|
||||||
let isSmall = nums[mid] < target;
|
right = mid; // 去左区间寻找
|
||||||
l = isSmall ? mid + 1 : l;
|
} else if (nums[mid] < target) {
|
||||||
r = isSmall ? r : mid - 1;
|
left = mid + 1; // 去右区间寻找
|
||||||
|
} else {
|
||||||
|
return mid;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return -1;
|
return -1;
|
||||||
};
|
};
|
||||||
|
|
||||||
// (版本二)左闭右开区间
|
// (版本二)左闭右开区间
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {number[]} nums
|
||||||
|
* @param {number} target
|
||||||
|
* @return {number}
|
||||||
|
*/
|
||||||
var search = function(nums, target) {
|
var search = function(nums, target) {
|
||||||
let l = 0, r = nums.length;
|
let left = 0, right = nums.length;
|
||||||
// 区间 [l, r)
|
// 使用左闭右开区间 [left, right)
|
||||||
while(l < r) {
|
while (left < right) {
|
||||||
let mid = (l + r) >> 1;
|
let mid = left + Math.floor((right - left)/2);
|
||||||
if(nums[mid] === target) return mid;
|
if (nums[mid] > target) {
|
||||||
let isSmall = nums[mid] < target;
|
right = mid; // 去左区间寻找
|
||||||
l = isSmall ? mid + 1 : l;
|
} else if (nums[mid] < target) {
|
||||||
// 所以 mid 不会被取到
|
left = mid + 1; // 去右区间寻找
|
||||||
r = isSmall ? r : mid;
|
} else {
|
||||||
|
return mid;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return -1;
|
return -1;
|
||||||
};
|
};
|
||||||
|
Reference in New Issue
Block a user