第 99 题:编程算法题

发布于 2022-12-04 12:19:58 字数 107 浏览 98 评论 59

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(59

独夜无﹌伴 2022-05-04 13:55:39

如此简单!

function fn(val) { 
  return !val ? '' : val % 10 + fn(Math.floor(val / 10));
}
怪我鬧 2022-05-04 13:55:39

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))))
}
无人接听 2022-05-04 13:55:39

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;

}

囚我心虐我身 2022-05-04 13:55:39
const reverseNum = num => {
    if (num === 0) {
        return '';
    }
    const mod = num % 10;
    return `${mod}` + reverseNum(Math.floor(num / 10));
}
临走之时 2022-05-04 13:55:39

what f***

£烟消云散 2022-05-04 13:55:39
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;
}
慵挽 2022-05-04 13:55:39

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

悍妇囚夫 2022-05-04 13:55:39
function reverse(num) {
    // 得到个位数
    var mod = num % 10
    // 剩余位数
    var n = Math.floor(num / 10)
    if(n <= 0) {
        return num
    } else {
        return '' + mod + reverse(n) 
    }
}
酷炫老祖宗 2022-05-04 13:55:39
function toreverseString(int){
   if(!int&&int!==0) return ''
   var arr=int.toString().split('');
   var str = arr.pop()
   return str+toreverseString(arr.join(''))
}
回梦 2022-05-04 13:55:39
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()一下么

拥有 2022-05-04 13:55:39
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
原野 2022-05-04 13:55:39

这可能是不依赖任何API的最佳实践了吧
const reverseInt = num => (num/10 >> 0) ? `${num%10}${reverseInt(num/10 >> 0)}` : `${num}`

留蓝 2022-05-04 13:55:39

// 用递归。第一步 处理递归到底的条件 第二步 构建一个更小问题的解。 第三步 用更小问题的解构建出原问题的解
第一步 很明显
第二步 reverse这个函数的宏观语意就是题目的意思,输入一个整数 返回 这个整数的逆序字符串。 那么将原num % 10 后得到一个子整数即新的num reverse(num)就很明确的求出了原数字 除了 个位的逆序数
第三步 将个位数与 reverse(num) 加起来 构建原问题的解
const reverse = (num: number): string => {
if (num < 10) {
return num.toString()
}
const cur = (num % 10).toString()
num = Math.floor(num / 10)
return cur + reverse(num)
}

謌踐踏愛綪 2022-05-04 13:55:39

function numberToString(num) {
let a = num % 10
let b = Math.floor(num/10)
if(b === 0) return a
return a + '' + numberToString(b)
}

×眷恋的温暖 2022-05-04 13:55:39
function numToString(num, res = []) {
	if (num == '') return;
		let temp = Number(num) % 10;
		res.push(temp);
		let str = num.toString();
		if (res.length !== 0) {
			numToString(str.slice(0, -1), res)
		}
	return res.join('');
}
白况 2022-05-04 13:55:39
function reverse(num){
   if(num < 10) return num
   let str = ''
   str = `${num%10}${reverse(Math.floor(num/10))}`
  return str
 }
妞丶爷亲个 2022-05-04 13:55:39

function reverse(val) {
if (!val) return ''
let str = val + ''
return reverse(+str.slice(1)) + str.charAt(0)
}

终难遇 2022-05-04 13:55:39
function reverse(num){
    var str=String(num)
    if(str.length===1){
        return str
    }

    return  reverse(str.slice(-1))+reverse(str.slice(0,-1))

}
蹲墙角沉默 2022-05-04 13:55:39
function fun(int, x = int.toString().split(""), y = "") {
  if (x.length == 0) return y;
  else y = fun(undefined, x, x.shift()) + y;
  return y;
}
console.time("my");
console.log(fun(123212312312312313212312123321231231231));
console.timeEnd("my");

console.time("sys");
console.log(
  (123212312312312313212312123321231231231)
    .toString()
    .split("")
    .reverse()
    .join("")
);
console.timeEnd("sys");
南烟 2022-05-04 13:55:39

function getRevString(num){
let numString= typeof num == 'string' ? num : num.toString();
if(numString<=1){
return numString
}else{
return ${numString.slice(numString.length- 1)}${getRevString(numString.slice(0,numString.length-1))}
}

}
console.log(getRevString(1234))

梦幻的味道。 2022-05-04 13:55:39
function reverseN2S(num) {
  let str = num + '';
  let index = str.length - 1;
  return str[index] + (index > 0 ? reverseN2S(str.substring(0, index)) : '');
}

console.log(reverseN2S(1234));    // '4321'
console.log(reverseN2S(-1000));   // '0001-'
耶耶耶 2022-05-04 13:55:39
function input(num){
    const str = num.toString();
    function reverser(pos){
        if(pos<0){
            return '';
        }
        return str.charAt(pos)+reverser(--pos);
    }
    return reverser(str.length-1);
}
微凉 2022-05-04 13:55:39
function reverse(num) {
    if(num == undefined) {
        return
    }
    var str = num + ''
    if(str.length == 0) {
        return str
    }
    var s = str.charAt(str.length - 1)
    return s + reverse(str.substr(0, str.length - 1))
}
魔法唧唧 2022-05-04 13:55:39
function reverse(num) {
    num = typeof num === 'number' ? '' + num : num;
    if (!num.length) return '';
    
    return num.slice(-1) + reverse(num.slice(0, -1));
}
三岁铭 2022-05-04 13:55:39
function input(num) {
	const strNum = String(num)
    
	if (strNum.length === 1) return strNum

	const d = Math.pow(10, strNum.length - 1)
	const res = Math.floor(num / d)
	const left = num % d
    
    console.log('res', res)
    console.log('d', d)
	return input(left) + res + ''
}

console.log(input(1234)) // '4321'
全部不再 2022-05-04 13:55:38

如果能传两个参数的话,这个算法将会更好。
尾递归调用。性能上好不少。

function func(v, r = '') {
    v += ''
    if (v.length < 1) return r
    r += v.slice(v.length-1)
    v = v.slice(0, v.length-1)
    return func(v, r)

}
func(1234)
// "4321"

科里化一下就好了,在外面封装一层函数只接收参数v

坐在坟头思考人生 2022-05-04 13:55:38
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 的时候返回的是整形

云淡月浅 2022-05-04 13:55:38
const convert = num =>
   (num / 10) | 0
     ? String(num % 10) + convert((num / 10) | 0 )
     : String(num)

let res = convert(12345)
console.log(res) // 54321
console.log(typeof res)// string
说谎友 2022-05-04 13:55:38

const calc = nums => nums.toString().split('').reduce((sum, num) => num + sum);

不语却知心 2022-05-04 13:55:38

贴上两种方法

// es6
const reverse1 = (num) => [...num.toString()].reverse().join('');

// no variable
var intReverseRecursive = function intReverseRecursive(num) {
    if (typeof num === 'number') {
        // add an anchor at the end
        return intReverseRecursive((num + '#').split(''));
    } else {
        // stop recursive
        if (num.indexOf('#') === 0) {
            num.shift();
            return num.join('');
        } else {
            num.splice(num.indexOf('#'), 0, num.shift());
            return intReverseRecursive(num);
        }
    }
};
千纸鹤带着心事 2022-05-04 13:55:38

function reverseNumber (num) {
if ((num / 10 >> 0) === 0) {
return (‘’ + num)
}
return ('' + num % 10 + reverseNumber(num / 10 >> 0) )
}
或者简化成三行代码
function reverseNumber (num) {
return (num / 10 >> 0) === 0 ? ('' + num) : ('' + num % 10 + reverseNumber(num / 10 >> 0) )
}

你这个不行

任谁 2022-05-04 13:55:38
function intToString (int) {
	if (int >= 10) {
		return String(int % 10) + intToString(Math.floor(int / 10))
	}
	return String(int)
}
源来凯始玺欢你 2022-05-04 13:55:38
function doo (num) {
    const str = `${num}`;
    const temp = str.length > 2 ? doo(str.slice(1)) : str.slice(1);

    return `${temp}${str[0]}`
}

先转成字符串,然后根据长度递归调用

爱你是孤单的心事 2022-05-04 13:55:38
const reverse = num=>
    num!=0 ? `${num % 10}${reverse(num / 10 >> 0)}` : ''

参考了各位大佬的思路,用%10来取最后一位,用/10来减少位数,用>>0来去除小数点,最后用es6的模板字符串来返回字符串类型的结果

温柔女人霸气范 2022-05-04 13:55:38

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

int型整数也包含负数,发现大多数解法(包括我的)都只考虑传入数值为正数的情况,题干中也没有相关示例,求解 @yygmind

一身软味 2022-05-04 13:55:38
function fn1(num){
  var str = num.toString();
   let i = 0,newStr="";
   while(i<str.length){
      newStr+=str.slice(str.length-(i+1),str.length-i);
     i++
   }
return newStr;
}
fn1(1234)
画▽骨i` 2022-05-04 13:55:38

var str = '12345';
function revert(str){
return str.length > 0 ? revert(str.slice(1)) + str[0] : str;
}

梦太阳 2022-05-04 13:55:38
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)

我觉着这个还是得加一些异常case,比如1000,或者负数

/**
 * @case 1234 => '4321'
 * @case 1000 => '1'
 * @case -1000 => '-1'
 * @case -1234 => '-4321'
 *
 * @param {number} number 传入的数值
 */
function solution(number) {
  if (number < 0) {
    return `-${solution(Math.abs(number))}`;
  }

  if (number < 10) {
    return `${number}`;
  }

  return `${number % 10 || ''}${solution(~~(number / 10))}`;
}

const assert = require('assert').strict;

assert.strictEqual(solution(1234), '4321');
assert.strictEqual(solution(1000), '1');
assert.strictEqual(solution(-1234), '-4321');
assert.strictEqual(solution(-1000), '-1');
空宴 2022-05-04 13:55:38
function reverseNum(x){
if(x<0){
return '-'+reverseNum(Math.abs(x))
}else if(typeof x === 'number'){
return reverseNum(String(x))
}
return x.length===0?x:reverseNum(x.slice(1)) + x[0]
}
reverseNum(1234560)
reverseNum(-1234560)
忆伤 2022-05-04 13:55:38
	function main(num){
		let [n, str] = ('' + num / 10).split(".");
                 return n > 0 ? str + main(n) : str;
	}
旧城空念 2022-05-04 13:55:38
function reverseString(str) {
    // 转换整型
    var str = str.toString()
    if (str.length === 1) return str;
    return reverseString(str.slice(1)) + str[0];
  }
橘味果▽酱 2022-05-04 13:55:38

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

子栖 2022-05-04 13:55:38

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));
}

满意归宿 2022-05-04 13:55:38
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
禾厶谷欠 2022-05-04 13:55:38
function reverse (v) {
    if (!v) return ''
    
    return foo(String(v).slice(1)) + String(v)[0]
}
风透绣罗衣 2022-05-04 13:55:37
function renum(num) {
  num = num.toString()
  let rest = num.slice(0, -1),
    last = num.slice(-1);
  return last.length ? last + renum(rest) : ''
}

console.log(renum(12345678)); // 87654321
作妖 2022-05-04 13:55:37

如果能传两个参数的话,这个算法将会更好。
尾递归调用。性能上好不少。

function func(v, r = '') {
    v += ''
    if (v.length < 1) return r
    r += v.slice(v.length-1)
    v = v.slice(0, v.length-1)
    return func(v, r)

}
func(1234)
// "4321"
宫墨修音 2022-05-04 13:55:14
function reverse(num) {
  const str = `${num}`
  return str ? `${str % 10}${reverse(str.slice(0, str.length - 1))}` : ''
}
椒妓 2022-05-04 13:55:10

思路:先将传入的参数转为string,取该字符串的第二位至末尾作为下一次递归函数的参数,判断当前字符串长度是否大于1,大于1则递归调用,等于1就返回这个字符串

function myReverse(num){ 
  let str = num.toString()
  let num2 = parseInt(str.slice(1))
  
  if(str.length >1){
    return myReverse(num2) + str[0]
  }else {
    return str
  } 
}

console.log(myReverse(1234))
伪心 2022-05-04 13:48:30

`var a = 1234;

function reverse(a){
var a = a.toString();
if(a.length==1){
return a
}else{
a = a.slice(-1)+reverse(a.slice(0,-1));
}
return a
}

reverse(a)`

饭团 2022-05-04 13:47:53
function reverseInt(intNumber) {
if (!(intNumber%10)) {
return ''
}
return (intNumber%10).toString() + reverseInt(parseInt(intNumber/10))
}

肤浅与狂妄 2022-05-04 13:44:31
function out(value){
  
 if(value.length===0) return '';
  
 value =  Array.isArray(value)?value:value.toString().split('');
 
  return value.pop() + out(value);

}
熊抱啵儿 2022-05-04 13:42:16

function reverseNumber (num) {
if ((num / 10 >> 0) === 0) {
return (‘’ + num)
}
return ('' + num % 10 + reverseNumber(num / 10 >> 0) )
}
或者简化成三行代码
function reverseNumber (num) {
return (num / 10 >> 0) === 0 ? ('' + num) : ('' + num % 10 + reverseNumber(num / 10 >> 0) )
}

迷乱花海 2022-05-04 13:36:03
function numberReverse(num) {
    const str = num.toString()
    return str.length === 1 ? str : numberReverse(str.substring(1)) + str.substring(0, 1)
}

这样行不,有错望指出

能否归途做我良人 2022-05-04 08:51:57
function test(num){
	num = typeof num === 'number' ? num.toString() : num
	if(num.length <= 1) return num
	else return num[num.length - 1] + test(num.substring(0, num.length - 1))
}
埋情葬爱 2022-05-03 11:36:08

`function test(num) {
var str = num + "";
if(str.length > 1) {
var newStr = str.substring(str.length - 1);
var oldStr = str.substring(0, str.length - 1);
return newStr + test(oldStr)
} else {
return num
}

}

var s = test(1234);

console.log(s);`

唯憾梦倾城 2022-05-03 04:32:39

其实这种直接使用JavaScript的API更简单直观。

//  the first solution by recursion

const numToReverseStr = num => {

    if( 'number' !== typeof num ) throw '输入需为int型整数';

    if(!Math.floor(num / 10)) return num.toString();

    return (num % 10).toString() + numToReverseStr( Math.floor(num / 10) );
}

console.log(numToReverseStr(2169362));

//  the second solution not by recursion but JavaScript API

const numToReverseStr_0 = num => {

    return num.toString().split('').reverse().join('');
}

console.log(numToReverseStr_0(2169362));
我不吻晚风 2022-05-02 23:15:20
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)
~没有更多了~

关于作者

岁月静好

暂无简介

0 文章
0 评论
23 人气
更多

推荐作者

内心激荡

文章 0 评论 0

JSmiles

文章 0 评论 0

左秋

文章 0 评论 0

迪街小绵羊

文章 0 评论 0

瞳孔里扚悲伤

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文