刷题笔记(第三天)

1.给定二进制字符串,将其换算成对应的十进制数字
输入:'11000000'
输出:192

function base10(str) {
            let sum = 0;
            let a = str.split('').reverse(); // 个位是第一个元素
            for (var i = 0; i < a.length; i++) {
                sum+=a[i]*Math.pow(2, i);
            }
            return sum;
        }

2.给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。

回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

例如,121 是回文,而 123 不是。

解题思路:通过toString方法,将数字x转化为字符串;通过字符串的split方法,将字符串转化为数组;通过数组的reverse方法将数组反转,通过数组的join方法,将数组拼接为字符串。比较正序字符串和反向字符串是否相等。

function isPalindrome(x) {
    let a = x.toString();
    let b = x.toString().split('').reverse().join('');
    return a === b
};

3.小数转化为整数的几种方法:

(1)JavaScript中的Math.trunc()函数用于通过除去小数位来返回浮点数的整数部分。换句话说,Math.trunc()函数会切断该点和其右边的数字。
返回值:Math.trunc()函数返回给定数字的整数部分

示例1:当将正数的float类型作为参数传递时:



示例2:当负数的float类型作为参数传递时:
 


示例3:当将0到1之间的正数作为参数传递时:



示例4:当将0到1之间的负数作为参数传递时:
 

(2)使用 parseInt()函数可解析一个字符串,并返回一个整数。

document.write(parseInt("10") + "
");            结果:10 document.write(parseInt("10.33") + "
");         结果:10 document.write(parseInt("34 45 66") + "
");      结果:34 document.write(parseInt(" 60 ") + "
");          结果:60 document.write(parseInt("40 years") + "
");      结果:40 document.write(parseInt("He was 40") + "
");     结果:NaN document.write(parseInt("10",10)+ "
");          结果:10 document.write(parseInt("010")+ "
");            结果:10 document.write(parseInt("10",8)+ "
");           结果:8 document.write(parseInt("0x10")+ "
");           结果:16 document.write(parseInt("10",16)+ "
");          结果:16

(3)Math.floor()向下取整

console.log(Math.floor(2.5));  //2
 
console.log(Math.floor(-2.5));  //-3

(4)Math.ceil()向上取整
Math.ceil():返回大于参数值的最小整数。

console.log(Math.ceil(2.5));  //3
 
console.log(Math.ceil(-2.5));  //-2


(5)Math.round()四舍五入

console.log(Math.round(2.5));  //3
 
console.log(Math.round(-2.5));  //-2
 
console.log(Math.round(-2.6));  //-3

4.请你编写一段代码实现一个数组方法,使任何数组都可以调用 array.last() 方法,这个方法将返回数组最后一个元素。如果数组中没有元素,则返回 -1 。

你可以假设数组是 JSON.parse 的输出结果。

示例 1 :

输入:nums = [null, {}, 3]
输出:3
解释:调用 nums.last() 后返回最后一个元素: 3。

Array.prototype.last = function() {
    if(this.length>0) {
        return this[this.length-1];
    } else {
        return -1;
    }
};

/**
 * const arr = [1, 2, 3];
 * arr.last(); // 3
 */

5.给定一个整型参数 n,请你编写并返回一个 counter 函数。这个 counter 函数最初返回 n,每次调用它时会返回前一个值加 1 的值 ( n ,  n + 1 ,  n + 2 ,等等)。

示例 1:

输入:
n = 10 
["call","call","call"]
输出:[10,11,12]
解释:
counter() = 10 // 第一次调用 counter(),返回 n。
counter() = 11 // 返回上次调用的值加 1。
counter() = 12 // 返回上次调用的值加 1。

/**
 * @param {number} n
 * @return {Function} counter
 */
var createCounter = function(n) {
    // 每次调用会返回前一个值+1,使用函数柯里化 则createCounter()会返回一个函数,这个函数可以继续被调用
    return ()=>{
        return n++;
    }
};

/** 
 * const counter = createCounter(10)
 * counter() // 10
 * counter() // 11
 * counter() // 12
 */

6. 睡眠函数

请你编写一个异步函数,它接收一个正整数参数 millis ,并休眠 millis 毫秒。要求此函数可以解析任何值。

示例 1:

输入:millis = 100
输出:100
解释:
在 100ms 后此异步函数执行完时返回一个 Promise 对象
let t = Date.now();
sleep(100).then(() => {
  console.log(Date.now() - t); // 100
});
示例 2:

输入:millis = 200
输出:200
解释:在 200ms 后函数执行完时返回一个 Promise 对象

/**
 * @param {number} millis
 * @return {Promise}
 */
async function sleep(millis) {
    return new Promise((resolve,reject)=>setTimeout(resolve,millis));
}

/** 
 * let t = Date.now()
 * sleep(100).then(() => console.log(Date.now() - t)) // 100
 */

7.数组归约运算

请你编写一个函数,它的参数为一个整数数组 nums 、一个计算函数 fn 和初始值init 。返回一个数组 归约后 的值。

你可以定义一个数组 归约后 的值,然后应用以下操作: val = fn(init, nums[0]) , val = fn(val, nums[1]) , val = fn(val, nums[2]) ,... 直到数组中的每个元素都被处理完毕。返回 val 的最终值。

如果数组的长度为 0,它应该返回 init 的值。

请你在不使用内置数组方法的 Array.reduce 前提下解决这个问题。

示例 1:

输入:
nums = [1,2,3,4]
fn = function sum(accum, curr) { return accum + curr; }
init = 0
输出:10
解释:
初始值为 init=0 。
(0) + nums[0] = 1
(1) + nums[1] = 3
(3) + nums[2] = 6
(6) + nums[3] = 10
Val 最终值为 10。
示例 2:

输入: 
nums = [1,2,3,4]
fn = function sum(accum, curr) { return accum + curr * curr; }
init = 100
输出:130
解释:
初始值为 init=100 。
(100) + nums[0]^2 = 101
(101) + nums[1]^2 = 105
(105) + nums[2]^2 = 114
(114) + nums[3]^2 = 130
Val 最终值为 130。

/**
 * @param {number[]} nums
 * @param {Function} fn
 * @param {number} init
 * @return {number}
 */
var reduce = function(nums, fn, init) {
    if (nums.length===0) {
        return init;
    } else {
        let i = 0;
        let sum=init;
        
        while(i

你可能感兴趣的:(笔记,前端,算法)