Js 牛客 刷题记录

Posted by Youzi Blog on April 1, 2019

牛客网刷题记录

替换空格

问题:请实现一个函数,将一个字符串中的每个空格替换成“%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
}