牛客网刷题记录
替换空格
问题:请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
实现:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function replaceSpace(str)
{
// write code here
let ary = str.split(' ')
let newStr = ary.join('%20')
return newStr;
}
// 正则
function replaceSpace(str) {
// write code here
let reg = new RegExp(' ', 'gm')
return str.replace(reg, '%20')
} 评论区看到一个,只是因为替换后的字符是URI的规则,不通用:
return encodeURI(str);
二维数组查找
问题:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
思路:暴力找,不管顺序;由于是有序数组,所以从左下角的元素(右上角也行)开始查,大于目标值就往上(或往左),小于目标值就往右(或往下)。
实现:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// 思路1:
function Find(target, array) {
// write code here
for (const el of array) {
if (el.includes(target)) {
return true
}
}
return false
}
// 思路2:
function Find(target, array) {
let rowLen = array.length
let colLen = array[0].length
for (let row = rowLen -1, col = 0; row >= 0 && col < colLen ;) {
if (array[row][col] > target) {
row--
} else if (array[row][col] < target) {
col++
} else {
return true
}
}
return false
}
反向打印链表
问题:输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。
思路:数组实例的unshift()方法从数组头部插入元素。
实现:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
/*function ListNode(x){
this.val = x;
this.next = null;
}*/
function printListFromTailToHead(head) {
// write code here
let ary = []
let list = head
while (list != null) {
ary.unshift(list.val)
list = list.next
}
return ary
}