剑指offer
1 剑指 Offer 04. 二维数组中的查找
1 题目描述
链接力扣
2 解答
从左下角或者右上角开始进行查找,判断target与该值是否相等,如果不相等,干掉其中一行或者一列
3 时空复杂度分析
4 代码
/** 二维数组中查找
*@param {number[][]} arr
*@param {number} target
*@return {boolean}
*/
function findNumberIn2DArray(arr, target){
if(!Array.isArray(arr) || !arr.length || !arr[0].length ){
return false;
}
let i = arr.length - 1;
let j = 0;
while(i >=0 && j < arr[i].length){
if(arr[i][j] === target){
return true;
}
else if(arr[i][j] > target){
i--;
}
else{
j++
}
}
return false;
}
console.log(findNumberIn2DArray([
[1, 4, 7, 11, 15],
[2, 5, 8, 12, 19],
[3, 6, 9, 16, 22],
[10, 13, 14, 17, 24],
[18, 21, 23, 26, 30]
], 5));
2 替换空格
1 题目描述
链接力扣:剑指 Offer 05. 替换空格
2 解答
1)使用正则表达式与replace
2)使用正则表达式与replaceAll
3)转换为数组,之后再连接成字符串
3)遍历字符串,非空格连接字符,空格替换成“%20”。因为字符串的不可更改性,必须会使用额外的空间
3 时空复杂度分析
4 代码
/** 字符串替换:遍历字符串,遇到空格就替换,
* @param {string} str
* @return {string}
*/
var replaceSpace = function(str) {
if(typeof str !== "string" || str.length === 0){
return str;
}
let reg = /\s/g;
return str.replace(reg, "%20");
};
var replaceSpace_2 = function(str) {
if(typeof str !== "string" || str.length === 0){
return str;
}
let reg = /\s/g;
return str.replaceAll(reg, "%20"); //额恩恩??node 14还没支持的api,力扣通过了
};
var replaceSpace_3 = function(str) {
if(typeof str !== "string" || str.length === 0){
return str;
}
return str.split(" ").join("%20"); //转为数组之后再连接(转数组的另外一种方式是:分隔符为“”,不过需要在数组中替换)
};
//第四种,使用字符串的拼接
var replaceSpace_4 = function(str) {
if(typeof str !== "string" || str.length === 0){
return str;
}
let rel = "";
for(let value of str){
if(value !== " "){ //不是空格
rel += value;
}
else {
rel += "%20";
}
}
return rel;
};
console.log(replaceSpace_4( "We are happy."));
3 剑指 Offer 06. 从尾到头打印链表
1 题目描述
链接力扣
2 解答
1)先将链表中每一个节点的值存入到数组中,然后对数组进行反转(可以使用api,也可以自己代码反转)
3 时空复杂度分析
4 代码
/**剑指 Offer 06. 从尾到头打印链表:输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。
*/
/**
* @param {ListNode} head
* @return {number[]}
*/
var reversePrint = function(head) {
if(head === null){
return [];
}
let result = [];
while(head){ //把所有值放到数组中
result.push(head.val);
head = head.next;
}
for(let i = 0, j = result.length - 1; i < j; i++, j--){
[result[i], result[j]] = [result[j], result[i]]; //交换位置,不使用原生的api
}
return result;
}