简单
69.x的平方根
给你一个非负整数 x ,计算并返回 x 的 算术平方根 。
由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。
注意:不允许使用任何内置指数函数和算符,例如 pow(x, 0.5) 或者 x ** 0.5 。
示例 1:
输入:x = 4输出:2
示例 2:
输入:x = 8输出:2解释:8 的算术平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。
提示:
- 0 <= x <= 231 - 1
题解
/*** @param {number} x* @return {number}*/var mySqrt = function(x) {};
中等
50.Pow(x, n)
46.全排列
给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。
示例 1:
输入:nums = [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]
示例 2:
输入:nums = [0,1]输出:[[0,1],[1,0]]
示例 3:
输入:nums = [1]输出:[[1]]
提示:
- 1 <= nums.length <= 6
- -10 <= nums[i] <= 10
- nums 中的所有整数 互不相同
递归
/*** @param {number[]} nums* @return {number[][]}*/// [1, 2, 3]// temp [1]var permute = function(nums) {let list = [];backtrack(list, [], nums);return list;};function backtrack(list, temp, nums) {// 终止条件if (temp.length === nums.length) {return list.push([...temp]);}for (let i = 0; i < nums.length; i++) {if (temp.includes(nums[i])) continue;temp.push(nums[i]);backtrack(list, temp, nums);temp.pop();}}
79.单词搜索
给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。
单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。
示例 1:
输入:board = [["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]], word = "ABCCED"输出:true
示例 2:
输入:board = [["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]], word = "SEE"输出:true
示例 3:
输入:board = [["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]], word = "ABCB"输出:false
提示:
- m == board.length
- n = board[i].length
- 1 <= m, n <= 6
- 1 <= word.length <= 15
- board 和 word 仅由大小写英文字母组成
递归 + 回朔
/*** @param {character[][]} board* @param {string} word* @return {boolean}*/var exist = function(board, word) {// 1.怎么找// 2.什么时候终止// 3.find内部 怎么找下一步(缓存存储中间的过程)if (board.length === 0) return false;if (word.length === 0) return true;const row = board.length;const col = board[0].length;// 怎么找for (let i = 0; i < row; i++) {for (let j = 0; j < col; j++) {let ret = find(i, j, 0);if (ret) return true;}}return false;function find(i, j, cur) {// 越界要停止if (i >= row || i < 0) return false;if (j >= col || j < 0) return false;const letter = board[i][j];// 字母不匹配if (letter !== word[cur]) return false;// 找到最后一个了,而且相等if (cur === word.length - 1) return true;// --终止条件board[i][j] = null; // 当前路径标记为null// ['A','B','C','E'],// ['S','F','C','S'],// ['A','D','E','E'],const ret = find(i+1,j,cur+1) ||find(i-1,j,cur+1) ||find(i,j+1,cur+1) ||find(i,j-1,cur+1);board[i][j] = letter;return ret;}};
