Advanced-Frontend / Daily-Interview-Question

我是依扬(木易杨),公众号「高级前端进阶」作者,每天搞定一道前端大厂面试题,祝大家天天进步,一年后会看到不一样的自己。
https://muyiy.cn/question/
27.38k stars 3.29k forks source link

第 99 题:编程算法题 #153

Open yygmind opened 5 years ago

yygmind commented 5 years ago

用 JavaScript 写一个函数,输入 int 型,返回整数逆序后的字符串。如:输入整型 1234,返回字符串“4321”。要求必须使用递归函数调用,不能用全局变量,输入函数必须只有一个参数传入,必须返回字符串。

zer0fire commented 4 years ago
function intToReverseString(num) {
    if(num < 10) {
        return num
    }
    let i = num % 10
    let ca = (num - i) / 10
    return i  + '' + intToReverseString(ca)
}
whosesmile commented 4 years ago

题目其实出的并不好,我不知道为什么必须要求只能接受一个数值参数,因为这样写出来的递归代码无法进行尾递归优化,效率很低。

litokele2018 commented 4 years ago
function int2ReverseString(num) {
  if (num % 10 === 0) {
    return num.toString()[0]
  }
  return func(num)
}

function func(num) {
  let last
  last = num % 10 + ''
  num = Math.floor(num / 10)
  if (num >= 10) {
    return last + func(num)
  } else {
    return last + num
  }
}
int2ReverseString(1234) // '4321'
suxin2017 commented 4 years ago
function a(num) {
  if (num.length === 1) {
    return num[0];
  }
  return a(num.slice(1)) + a(num[0]);
}

console.log(a("123".split("").join("")));
niannings commented 4 years ago
function reverse(intNum) {
  let str = intNum + '';
  if (str === 'NaN') return '';
  return reverse(parseInt(str.substr(1))) + str[0];
}
1368725603 commented 4 years ago

console.log(reverseNum(14987)); function reverseNum(num) { var arr = String(num).split(''); if (arr.length > 1) { return arr.pop() + reverseNum(Number(arr.join(''))); } else { return arr.pop(); } }

zuoyi615 commented 4 years ago

这样感觉更好

function reverseNumber (number) {
  const numberStr = number.toString()
  return numberStr.length === 1 ? numberStr : number % 10 + reverseNumber(Math.floor(number / 10))
}

reverseNumber(12345)
yangjiedage commented 4 years ago

function reversInt(num) { let digit = Math.pow(10, (num.toString().length - 1)) if(num < 10) { return num.toString() }

return Math.floor(num / digit) + reversInt(num % digit) }

em2046 commented 4 years ago
function fun(num){
    let num1 = num / 10;
    let num2 = num % 10;
    if(num1<1){
        return num;
    }else{
        num1 = Math.floor(num1)
        return `${num2}${fun(num1)}`
    }
}
var a = fun(12345)
console.log(a)
console.log(typeof a)

不注重细节呀,输入1-9,输出就是数字类型了

korylee commented 4 years ago
const reverse = (num) => {
  return `${num}`.length === 1 ? `${num}` : `${num%10}${reverse(parseInt(num/10))}`
}
const reverse2 = (num) => {
  return `${num}`.length === 1 ? `${num}` : reverse2(`${num}`.substring(1)) + `${num}`.charAt(0)
}
tangzhibao commented 4 years ago
const intNum = 1234

const int2str = num => (function deep([tar, res = '']) {
  if (tar === '') return res
  return deep([`${tar}`.slice(0, -1), res + `${tar}`.split('').pop()])
})([num])

int2str(intNum)  // '4321'

柯里化+尾递归 没有声明额外的变量。可能过于花哨hhh

3104026951 commented 4 years ago

function reverseNumToStr(num) { let str=''; if(num<10) { str+=String(num)} else { str+=String(num%10); str+= reverseNumToStr(Math.floor(num/10)) } return str; }

NewPrototype commented 4 years ago
function fn(_num,){
  let _str=_num.toString().split('');
  return _str.reverse().join('')
}

------------------或

function fn(_num){
  const _num1=_num%10;
  const _num2=Number.parseInt(_num/10,10);
  return _num2<1?_num: `${_num1}${fn(_num2)}`
}
trace1208 commented 4 years ago

思路:将整型转化成字符串,然后借用扩展运算符将字符串转化为数组,通过数组的pop方法获取数组的最后一个值,通过尾递归实现优化规则,

function switchReverseStr(num, reverseStr = '') {
      if(!num) return reverseStr
      let str = num + ''
      let arr = [...str]
      let lastValue = arr.pop()
      reverseStr += lastValue
      return switchReverseStr(parseInt(arr.join('')), reverseStr )
}
lqk9511 commented 4 years ago

迭代不香吗?

function reverse(num) {
  let res = 0
  while (num != 0) {
    res = res * 10 + (num % 10)
    num = (num / 10) >> 0
  }
  return res.toString()
}

递归自己改~

lqk9511 commented 4 years ago

迭代不香吗?

function reverse(num) {
  let res = 0
  while (num != 0) {
    res = res * 10 + (num % 10)
    num = (num / 10) >> 0
  }
  return res.toString()
}

递归自己改~

好吧,还是附上递归

function reverse() {
  let res = 0
  return function reversed(num) {
    if (num !== 0) {
      res = res * 10 + (num % 10)
      reversed((num / 10) >> 0)
    }
    return res.toString()
  }
}
CHENJIAMIAN commented 4 years ago
f = (v) => v<0 ? '-'+ f(-v)  :  v < 10 ? v : `${v % 10}${f(Math.floor(v / 10))}`
f(123456789)
f(-123456789)
zhengybo commented 4 years ago

一行代码

`

function reserve(n){
    return n ? (n % 10 + reserve((n / 10) | 0)) : ''
}

`

trymoremore commented 4 years ago
const reverse = (int)=>{
    if(!int)return "";
    let i = int.toString().split("");
    return i.splice(-1,1).join() + reverse(i.join(""));
}
xsbk commented 4 years ago
function fn(num){
  if(typeof num =="number"){
    var item = String(num);
    if(item.length<=1){
      return item;
      }else{
      return fn(parseInt(item.substring(1)))+item[0];
    }
  }else{
    return null;
  }
}
GoldenZhu commented 4 years ago
function reverse2Str(num) {
    if(typeof num === "number") {
        return reverse2Str(String(num).split('').reverse().join(''));
    }else {
        return Number(num);
    }
}
wang-qiqi commented 4 years ago
function reverse(n) {
  var stack = String(n).split('');
  console.log('stack', stack);
  if (stack && stack.length) {
    return Number(stack.shift()) + 10 * reverse(stack.join(''));
  } else {
    return '';
  }
}
zengkaiz commented 4 years ago

function reverse(num){ num = num.toString() let len = num.length let result = '' if(len>0){ let left = num.slice(len-1) let right = num.slice(0, len-1) len-- result += (left + reverse(right)) } return result }

wj1990 commented 4 years ago
function resever(int) {
  let str= ''
  let arr = (int + '').split('')
  while(arr.length) {
    str += arr.pop()
  }
  return str
}
MarsZone commented 4 years ago

leetcode 第7题

` var reverse = function(x) { //数学法 let result = 0; while(x !== 0) { result = result * 10 + x % 10; x = (x / 10) | 0; } return (result | 0) === result ? result : 0;

//字符串翻转
let arr = x.toString().split('').reverse()
let str
if (arr[arr.length-1] === '-') {
    arr.pop()
    str = '-' + arr.join('')
} else {
    str = arr.join('')
}
let res = str[0] === '0' ? Number(str.substr(1)) : Number(str)
if (res > Math.pow(2, 31) - 1 || res < Math.pow(2, 31) * -1) return 0
return res

}; `

guyuezhai commented 4 years ago
function reverse(num){
    num=num.toString()
    let length=num.length
    if(length==1){
        return num
    }else{
        return reverse(num.slice(1))+num[0]
    }
}
let result=reverse(1230)
console.log(result)
// => 0321
wabRul commented 4 years ago
function reverse(n) {
  let str = '' + n
  function helper(pre, idx) {
    if (idx === str.length) {
      return pre
    }
    return helper(str[idx] + pre, idx + 1)
  }
  return helper('', 0)
}
muzichen commented 4 years ago

const reverse = function(num) {
    const numA = Math.floor(num / 10)
    const numB = num % 10
    if (numA !== 0) {
        return '' + numB + revert(numA)
    } else {
        return numB
    }
}
m7yue commented 4 years ago
const run = (n) => {
  let s = String(n)
  if(s.length == 1) return s
  return run(+s.slice(1))+s[0]
}
861621821 commented 4 years ago
function fn(num){
    var str = Number(num).toString()
    let part1 = str.substr(str.length - 1),
        part2 = str.substr(0, str.length - 1)
    if(Number(num).toString().length > 1){
        return `${part1}${fn(part2)}`
    }else{
        return num
    }
}
fn(12345)
mesterLi commented 3 years ago
function reverse(val) {
    let reverseStr = "";
    let arrVal = String(val).split("");
    let _reverse = function (arrVal) {
        if (arrVal.length === 0) {
            return reverseStr
        }
        reverseStr += arrVal.pop()
        _reverse(arrVal)
        return reverseStr
    }
    return _reverse(arrVal)
}

console.log(reverse(12345))
ranxiaoli commented 3 years ago

const resverse = function (num) { const numStr = num+""; const arrStr = numStr.split(""); let str = ""; const getStr = function (arrStr) { let len = arrStr.length; if(len === 0) { return; } str += arrStr[len-1]; arrStr.pop(); getStr(arrStr);

} getStr(arrStr) return str; }

console.log(resverse(456789))

mocayo commented 3 years ago
const reverse = function (x, cur = '') {
    if (x <= 0) {
        return cur;
    }

    var p = x % 10;

    return reverse((x - p) / 10, cur + p);
};

console.log(reverse(1234));
coveyz commented 3 years ago

看了大家写的 再看看我写的 哭了....

playlife1 commented 3 years ago
function reverseString(str) {
    // 转换整型
    var str = str.toString()
    if (str.length === 1) return str;
    return reverseString(str.slice(1)) + str[0];
  }
foggsz commented 3 years ago

function abc(n){ if(n>0){ return abc(Math.floor(n/10)) + n %10 + '' }else { return n } }

joinerGreat commented 3 years ago

const reverseNum=(num)=>{ let str=num.toString(); let len=str.length; return len === 1 ? str: str.substring(len-1)+reverseNum(str.substring(0,len-1)); }

manyyuri commented 3 years ago
function reverse(num) {
  let numArr = num.toString().split("");
  return recuision(numArr);
}
function recuision(arr) {
  if (arr.length === 1) return arr.pop() + "";
  return arr.pop() + recuision(arr);
}
console.log(reverse(1234)); // "4321"
console.log(typeof reverse(1234)); // string
loveyunk commented 3 years ago
function reverse (v) {
    if (!v) return ''

    return foo(String(v).slice(1)) + String(v)[0]
}
qyuzh commented 3 years ago

如此简单!

function fn(val) { 
  return !val ? '' : val % 10 + fn(Math.floor(val / 10));
}
JIAFENG123 commented 3 years ago

function a(n){

let _len = String(n).length
let str = String(n)
if(_len==1){
return str[0];
}
if(_len==2){
return str[1]+str[0];
}
return (str[_len-1] + a(Number(str.slice(0,_len-1))))
}
lianglei777 commented 3 years ago

function reverse(num){

let datas = num.toString().split('');
let length = datas.length;
let result = '';

let change = (data, index = 0) => {

    // 判断中间点
    if(((length % 2 === 1) && (index === Math.floor(length/2)))
        || ((length % 2 !== 1) && (index + 1) === length/2)
    ) {
        result = data.join('');
        return ;
    }

    let temp =  data[index];
    data[index] = data[length-1-index];
    data[length-1-index] = temp

    index ++;
    change(data, index);
}

return result;

}

ramseyfeng commented 3 years ago
const reverseNum = num => {
    if (num === 0) {
        return '';
    }
    const mod = num % 10;
    return `${mod}` + reverseNum(Math.floor(num / 10));
}
whyfail commented 3 years ago

what f***

OhIAmFine commented 3 years ago
function reserveStr(num) {
  const str = num.toString(), len = str.length;
  if (len === 1 || !len) return str;
  if (len === 2) return str[1] + str[0];
  let res = "";
  for (let i = 0; i < len; i += 2) {
    res = reserveStr(str.slice(i, i + 2)) + res;
  }
  return res;
}
peterczg commented 3 years ago

function reverse(num){ return (num + "").length ? (reverse((num + "").slice(1)) + (num + "")[0]) : "" }

MrLeihe commented 3 years ago
function reverse(num) {
    // 得到个位数
    var mod = num % 10
    // 剩余位数
    var n = Math.floor(num / 10)
    if(n <= 0) {
        return num
    } else {
        return '' + mod + reverse(n) 
    }
}
nxt-hj commented 3 years ago
function toreverseString(int){
   if(!int&&int!==0) return ''
   var arr=int.toString().split('');
   var str = arr.pop()
   return str+toreverseString(arr.join(''))
}
635864859 commented 3 years ago
function fun(num){
    let num1 = num / 10;
    let num2 = num % 10;
    if(num1<1){
        return num;
    }else{
        num1 = Math.floor(num1)
        return `${num2}${fun(num1)}`
    }
}
var a = fun(12345)
console.log(a)
console.log(typeof a)

输入的数字小于 10 的时候返回的是整形

小于10的时候toString()一下么

printfshen commented 3 years ago
function core(input) {
  input = (input + "")
  let length = input.length
  let count = length - 1
  let result = ""
  return function f1() {
    result += input[count]
    if (count <= 0) {
      count = length - 1
      return result
    }
    count--
    return f1.call(null)
  }
}

core(123456789)()  // 987654321