Merge branch 'master' of github.com:youngyangyang04/leetcode-master

This commit is contained in:
youngyangyang04
2021-09-27 11:13:45 +08:00
3 changed files with 90 additions and 42 deletions

View File

@ -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:

View File

@ -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

View File

@ -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;
}; };