此阶段给自己定的目标是:做过的这些题每天坚持继续刷二遍,每道题做过之后开始尝试多解法尝试解题。上一阶段是感知都有什么题目,此阶段主要系统化常规题解套路知识,牢记牢记此阶段目的。
题号:6
var convert = function (s, numRows) {
//只有一行就返回
if (numRows == 1) {
return s
}
let arr = []
for (let i = 0; i < numRows; i++) {
arr[i] = []
}
//down字符元素摆放方向开始向下
let row = 0, col = 0, down = true
for (let i = 0; i < s.length; i++) {
arr[row][col] = s[i]
if (down) {
//向下摆元素
if (row == numRows - 1) {
//到底了开始向上走
col++
row--
down = !down
} else {
row++
}
} else {
//开始向上摆元素
if (row == 0) {
//到顶了开始向下走
row++
down = !down
} else {
row--
col++
}
}
}
let result = ''
for (let i = 0; i < arr.length; i++) {
for (let j = 0; j < arr[i].length; j++) {
if (arr[i][j]) {
result += arr[i][j]
}
}
}
return result
};
题号:993
//广度优先搜索
var isCousins = function (root, x, y) {
let queue = [root]
while (queue.length != 0) {
let count = queue.length
let tmpArr = []
//一层一层来
while (count != 0) {
let node = queue.shift()
if (node.left) {
let obj = {}
obj.node = node.left
obj.parent = node
tmpArr.push(obj)
queue.push(node.left)
}
if (node.right) {
let obj = {}
obj.node = node.right
obj.parent = node
tmpArr.push(obj)
queue.push(node.right)
}
count--
}
let xNode = null, yNode = null
for (let idx = 0; idx < tmpArr.length; idx++) {
let obj = tmpArr[idx]
if (obj.node.val == x) {
xNode = obj
}
if (obj.node.val == y) {
yNode = obj
}
if (xNode && yNode) {
console.log(xNode.parent);
console.log(yNode.parent);
if (xNode.parent !== yNode.parent) {
return true
}
}
}
}
return false
};
题号:1442
//前缀和思想
var countTriplets = function (arr) {
let prefixArr = new Array(arr.length + 1).fill(0)
for (let idx = 1; idx <= arr.length; idx++) {
prefixArr[idx] = prefixArr[idx - 1] ^ arr[idx - 1]
}
let i = 0, result = 0
while (i <= arr.length) {
let j = i + 1
while (j <= arr.length) {
let k = j
while (k <= arr.length) {
if (prefixArr[j - 1] ^ prefixArr[i - 1] == prefixArr[k] ^ prefixArr[j - 1]) {
result++
}
k++
}
j++
}
i++
}
return result
};