IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> [腾讯前端笔试]1个小时3道题 -> 正文阅读

[数据结构与算法][腾讯前端笔试]1个小时3道题

写在前面

有了上次用c++用前端面试题的经验后,我果断开始用js刷题了,刷了一些题,但是面试的几次基本都不是leetcode和剑指offer上面的题目。
这次倒是有点沾边了,一个小时三道题,都是什么题目,我们一起来看看把!

题目一

两个非负大整数相加,得到正确对长整数结果显示,而非指数形式8.xx+33显示。
示例:

输入:1111111111111111111111111,2222222222222222222222222
输出:3333333333333333333333333

1111111111111111111111111系统会自动显示为1.1111111省略一下1e+24这样
所以没有想象的那么简单,又因为可能是大数,所以要用字符串来操作

我提交的代码

第一题,比较紧张吧,找题目文档也花了很多时间,开着视频刷题还是不习惯啊,哈哈!

但是我的注释什么的还是很标准吧!

/*
 * @Author: 41
 * @Date: 2021-10-28 14:37:22
 * @LastEditors: 41
 * @LastEditTime: 2021-10-28 15:38:36
 * @Description: 题目1
 */


/** 题目与解题时间 */
// let date=new Date()
// console.log(date.toLocaleString());
// 开始时间: 2021-10-28 2:39:54
// 结束时间: 2021-10-28 3:01:22
/*
1. 两个非负大整数相加,得到正确对长整数结果显示,而非指数形式8.xx+33显示。
示例:
输入:1111111111111111111111111,2222222222222222222222222
输出:3333333333333333333333333
*/

/** 解题区域 */
/** 解题思路 */
// 1.转换称数组然后相加
// 2.中间可能需要补零
// 3.最后将数组转换称字符串
function toArr(num){
    let str=num.toString()
    let arr=str.split("")
    let index=arr.indexOf('e')
    arr=arr.slice(0,index) //除掉后面的e
    arr.splice(arr.indexOf('.'),1)    
    return arr
}
function deal(num1,num2){
    let arr1=toArr(num1)
    // console.log(arr1);
    let arr2=toArr(num2)
    // console.log(arr2);
    if(arr1.length>arr2.length){ //需要补零
        while(arr2.length<arr1.length){
            arr2.unshift(0)
        }
    }else{
        while(arr2.length>arr1.length){
            arr1.unshift(0)
        }
    }
    /** 字符传数字 */
    for(let i=0;i<arr1.length;i++){
        arr1[i]=arr1[i]-'0'      
    }
    for(let i=0;i<arr2.length;i++){
        arr2[i]=arr2[i]-'0'
    }
    /** 下面是两个数组相加  结果直接存放在arr1*/
    /** 需要考虑进位 */
    let jinwei=0
    /** 翻转一下方便操作 */
    arr1=arr1.reverse()
    arr2=arr2.reverse()
    for(let i=0;i<arr1.length;i++){
        arr1[i]+=arr2[i]+jinwei
        if(arr1[i]>9){
            arr1[i]%=10
            jinwei=1
        }else{
            jinwei=0
        }
    }
    // console.log(arr1); //成功了!
    /** 下面我转成字符串就可以了 */
    console.log(arr1.join(''));
}
/** 测试区域 */

str1=1111111111111111111111111
str2=2222222222222222222222222
deal(str1,str2)

在这里插入图片描述

题目二

小明爬楼梯,一次可以走一步或者两步,输入楼梯级数,输出所有可能的走法总数。
示例:

输入:3
输出:3

说明:三种走法为[1,1,1]、[1,2]、[2,1]

我提交的代码

得到答案还是很简单的,毕竟我经常用递归装逼…
就是得到路径的过程有bug,但是这题不需要保存路径…

/*
 * @Author: 41
 * @Date: 2021-10-28 14:37:22
 * @LastEditors: 41
 * @LastEditTime: 2021-10-28 15:39:47
 * @Description: 第二题
 */


/** 题目与解题时间 */
//  let date=new Date()
//  console.log(date.toLocaleString()); 
/* 开始时间: 2021-10-28 3:02:21
    结束时间:2021-10-28 3:12:26
*/
  
  
/*
2. 小明爬楼梯,一次可以走一步或者两步,输入楼梯级数,输出所有可能的走法总数。
示例:
输入:3
输出:3
说明:三种走法为[1,1,1]、[1,2]、[2,1]
*/

/** 解题区域 */
/** 解题思路 */
/* 
//  1.这个应该是一个递归的题目
//  2.把递归的路径放进ans中保存就可以了
//  3.和dfs很像吧!
//  4.可能走一步或者走两步
 */

let ans=[]
function deal(n){
    if(n<0) return 
    if(n==0) ans.push('success')
    deal(n-1)
    deal(n-2)
}

/** 测试区域 */
deal(3)
console.log(ans);
console.log(ans.length); //答案正确了,路径有点问题,有的没有回溯也许?
/** 先做第三题,这个路径后面再来做,答案已经得到了! */


/** 下面我们看看第二题能不能把路径也保存好输出 */
// let ans2=[]
// function deal2(n,temp){
//     if(n<0) return 
//     if(n===0) console.log(temp);
//     deal2(n-1,temp,1)
//     deal2(n-2,temp,2)
// }
// deal2(3,[],1)
// deal2(3,[],2)
// console.log(ans2);
// console.log(ans2.length);

在这里插入图片描述

题目三

将正整数数字格式化为千分位金额格式
示例:

输入:123456789
输出:123,456,789

我提交的代码

最后一题,我反而觉得最简单!

/*
 * @Author: 41
 * @Date: 2021-10-28 14:37:22
 * @LastEditors: 41
 * @LastEditTime: 2021-10-28 15:39:42
 * @Description: 第三题
 */

/** 题目与解题时间 */
// let date=new Date()
// console.log(date.toLocaleString());
// 开始时间: 2021-10-28 3:13:39
// 结束时间: 2021-10-28 3:21:40

// 3. 将正整数数字格式化为千分位金额格式
// 示例:
// 输入:123456789
// 输出:123,456,789


/** 解题区域 */
/** 解题思路 */
// 1.正整数,没有小数的意思吧!
// 2.三位数字一分隔,然后加一个逗号
// 3.用正则表达式去做(好久没写了) 或者三个一取用splice? 试一试
function deal(num){
    let ans_temp=[]
    num=num.toString()
    let arr=num.split("")
    // console.log(arr);
    while(arr.length>0){
        let temp=arr.splice(-3).join('')
        ans_temp.unshift(temp) 
    }
    console.log(ans_temp.join(','));
}

/** 测试区域 */
let num=123456789
deal(num) //得到正确答案 123,456,789
let num2=12345678 
deal(num2) //如果不是3的倍数,会不会有错呢? 也是没有问题!

在这里插入图片描述

总结

都做出来了…
第一题耗时 21分半
第二题耗时 10分
第三题耗时 8分
属于慢热选手
…其实也不需要这么久,注释写多了!

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-10-29 13:18:32  更:2021-10-29 13:19:04 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 9:29:31-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码