写在前面
有了上次用c++用前端面试题的经验后,我果断开始用js刷题了,刷了一些题,但是面试的几次基本都不是leetcode和剑指offer上面的题目。 这次倒是有点沾边了,一个小时三道题,都是什么题目,我们一起来看看把!
题目一
两个非负大整数相加,得到正确对长整数结果显示,而非指数形式8.xx+33显示。 示例:
输入:1111111111111111111111111,2222222222222222222222222
输出:3333333333333333333333333
1111111111111111111111111系统会自动显示为1.1111111省略一下1e+24这样 所以没有想象的那么简单,又因为可能是大数,所以要用字符串来操作
我提交的代码
第一题,比较紧张吧,找题目文档也花了很多时间,开着视频刷题还是不习惯啊,哈哈!
但是我的注释什么的还是很标准吧!
function toArr(num){
let str=num.toString()
let arr=str.split("")
let index=arr.indexOf('e')
arr=arr.slice(0,index)
arr.splice(arr.indexOf('.'),1)
return arr
}
function deal(num1,num2){
let arr1=toArr(num1)
let arr2=toArr(num2)
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'
}
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.join(''));
}
str1=1111111111111111111111111
str2=2222222222222222222222222
deal(str1,str2)
题目二
小明爬楼梯,一次可以走一步或者两步,输入楼梯级数,输出所有可能的走法总数。 示例:
输入:3
输出:3
说明:三种走法为[1,1,1]、[1,2]、[2,1]
我提交的代码
得到答案还是很简单的,毕竟我经常用递归装逼… 就是得到路径的过程有bug,但是这题不需要保存路径…
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);
题目三
将正整数数字格式化为千分位金额格式 示例:
输入:123456789
输出:123,456,789
我提交的代码
最后一题,我反而觉得最简单!
function deal(num){
let ans_temp=[]
num=num.toString()
let arr=num.split("")
while(arr.length>0){
let temp=arr.splice(-3).join('')
ans_temp.unshift(temp)
}
console.log(ans_temp.join(','));
}
let num=123456789
deal(num)
let num2=12345678
deal(num2)
总结
都做出来了… 第一题耗时 21分半 第二题耗时 10分 第三题耗时 8分 属于慢热选手 …其实也不需要这么久,注释写多了!
|