第 99 题:编程算法题
yygmind opened this issue · 174 comments
用 JavaScript 写一个函数,输入 int 型,返回整数逆序后的字符串。如:输入整型 1234,返回字符串“4321”。要求必须使用递归函数调用,不能用全局变量,输入函数必须只有一个参数传入,必须返回字符串。
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)
其实这种直接使用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));
`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);`
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))
}
function numberReverse(num) {
const str = num.toString()
return str.length === 1 ? str : numberReverse(str.substring(1)) + str.substring(0, 1)
}
这样行不,有错望指出
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) )
}
function out(value){
if(value.length===0) return '';
value = Array.isArray(value)?value:value.toString().split('');
return value.pop() + out(value);
}
function reverseInt(intNumber) {
if (!(intNumber%10)) {
return ''
}
return (intNumber%10).toString() + reverseInt(parseInt(intNumber/10))
}
`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)`
思路:先将传入的参数转为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))
function reverse(num) {
const str = `${num}`
return str ? `${str % 10}${reverse(str.slice(0, str.length - 1))}` : ''
}
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
如果能传两个参数的话,这个算法将会更好。
尾递归调用。性能上好不少。
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"
如果能传两个参数的话,这个算法将会更好。
尾递归调用。性能上好不少。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
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 的时候返回的是整形
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
const calc = nums => nums.toString().split('').reduce((sum, num) => num + sum);
贴上两种方法
// 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);
}
}
};
function intToString (int) {
if (int >= 10) {
return String(int % 10) + intToString(Math.floor(int / 10))
}
return String(int)
}
function doo (num) {
const str = `${num}`;
const temp = str.length > 2 ? doo(str.slice(1)) : str.slice(1);
return `${temp}${str[0]}`
}
先转成字符串,然后根据长度递归调用
const reverse = num=>
num!=0 ? `${num % 10}${reverse(num / 10 >> 0)}` : ''
参考了各位大佬的思路,用%10来取最后一位,用/10来减少位数,用>>0来去除小数点,最后用es6的模板字符串来返回字符串类型的结果
用 JavaScript 写一个函数,输入 int 型,返回整数逆序后的字符串。如:输入整型 1234,返回字符串“4321”。要求必须使用递归函数调用,不能用全局变量,输入函数必须只有一个参数传入,必须返回字符串。
int型整数也包含负数,发现大多数解法(包括我的)都只考虑传入数值为正数的情况,题干中也没有相关示例,求解 @yygmind
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)
var str = '12345';
function revert(str){
return str.length > 0 ? revert(str.slice(1)) + str[0] : str;
}
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');
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)
function main(num){
let [n, str] = ('' + num / 10).split(".");
return n > 0 ? str + main(n) : str;
}
题目很简单,增加一些异常判断好了
const reverse = (num) => {
let type = num || undefined;
if(Object.prototype.toString.call(type) !== '[object Number]') {
return;
}
if(num < 0) {
return '-' + reverse(num * -1)
}
let s = num + '';
if(s.length > 1){
let temp = s.substring(0,1);
num = s.substring(1,s.length) - '';
return reverse(num) + temp;
}else {
return num + '';
}
}
function reverse (num) {
num = typeof num === 'number' ? num.toString() : num;
if (num.length <= 1) return num;
return `${num[num.length-1]}${reverse(num.slice(0, -1))}`
}
var reverse = function(n) {
n = n + '';
return Array.from(n).reduce((str, a) => {
return a + str;
})
}
恕我直言
function print(n) {
if (!n) return '0';
let num2Str = n => {
if (!n) return '';
return `${n % 10}` + num2Str(~~(n / 10));
}
return num2Str(n);
}
INT范围内不会有问题😊
function revNum(num){
if(num < 10){
return '' + num
} else return '' + num%10 + revNum(num/10>>0)
}
function reverseStr(num) {
if (num < 10) {
return num;
}
let res = (num % 10) + "" + reverseStr(Math.floor(num / 10));
return res;
}
function foo(num){
if(typeof(num) == 'number'){
var a = num.toString();
var b = [];
for (var i = a.length - 1; i >= 0; i--){
b.push(a[i]);
}
return foo(b);
}
return num.join('');
}
function sortNum2String(num){
let arr = (num+'').split('');
arr.sort((a,b)=>{
return b-a
})
return arr.join('')
}
function sortNum2String(num){
let arr = (num+'').split('');
arr.sort((a,b)=>{
return b-a
})
return arr.join('')
}
???
// 使用递归,只使用一个参数(利用柯里化)
function reverse(index) {
return function (num) {
num=num+'';
if(index>=num.length/2||(index>=num.length/2-1&&num.length%2===1))return num;
return reverse(index+1)(num.slice(0,index)+num[num.length-1-index]+num.slice(index+1,-index-1)+num[index]+(index!==0?num.slice(-index):''))
}
}
reverse(0)(123456);
function bili(int){
if(int.toString().length <= 1){ return int }
return (int/10).toString().slice(-1) + bili(parseInt(int/10))
}
function solution(number) { if (number < 0) { return `-${solution(Math.abs(number))}`; } if (number < 10) { return `${number}`; } return `${number % 10 || ''}${solution(~~(number / 10))}`; }
我觉得这样才是正解,不考虑负数和倒过来是0就像耍流氓
function solution(number) { if (number < 0) { return `-${solution(Math.abs(number))}`; } if (number < 10) { return `${number}`; } return `${number % 10 || ''}${solution(~~(number / 10))}`; }
测试了下,跟我的bug一样。1001的中间0都被Number化时去除了
function solution(number) { if (number < 0) { return `-${solution(Math.abs(number))}`; } if (number < 10) { return `${number}`; } return `${number % 10 || ''}${solution(~~(number / 10))}`; }测试了下,跟我的bug一样。1001的中间0都被Number化时去除了
单参就比较难了,双参的话就比较好写,用一个参数带初始number的位数信息,在去掉0的时候判断一下就行
function solution(number) { if (number < 0) { return `-${solution(Math.abs(number))}`; } if (number < 10) { return `${number}`; } return `${number % 10 || ''}${solution(~~(number / 10))}`; }测试了下,跟我的bug一样。1001的中间0都被Number化时去除了
单参就比较难了,双参的话就比较好写,用一个参数带初始number的位数信息,在去掉0的时候判断一下就行
我觉得这才是这道题的难点,要不然不考虑这些真的是在耍流氓。。
function reverse(num){
num = num + ''
var len = num.length
if(len == 1) return num
return num[len - 1] + reverse(num.slice(0,-1))
}
console.log(reverse(1234))
function reverse(num){ return num.toString().split('').reverse().join('') }
function solution(number) { if (number < 0) { return `-${solution(Math.abs(number))}`; } if (number < 10) { return `${number}`; } return `${number % 10 || ''}${solution(~~(number / 10))}`; }测试了下,跟我的bug一样。1001的中间0都被Number化时去除了
单参就比较难了,双参的话就比较好写,用一个参数带初始number的位数信息,在去掉0的时候判断一下就行
我觉得这才是这道题的难点,要不然不考虑这些真的是在耍流氓。。
用小数位来标示是否舍0,写的很复杂,暂时符合条件了。。
function solution(number) {
if (number < 0) {
return `-${solution(Math.abs(number))}`;
}
let integerPart = Math.floor(number);
let decimal = `${number}`.split('.')[1];
let numberSize = `${integerPart}`.length;
if (number < 10) {
return `${integerPart}`;
}
if (integerPart % 10 === 0) {
let initialNumberSize = decimal || 0;
// initialNumberSize === 0 => 初始number以0为结尾
// +initialNumberSize === numberSize => 以2个以上0为结尾
if (initialNumberSize === 0 || +initialNumberSize === numberSize) {
return solution(parseFloat(`${~~(integerPart / 10)}.${numberSize - 1}`));
}
return `0${solution(
parseFloat(`${~~(integerPart / 10)}.${initialNumberSize}`)
)}`;
}
// 以小数标示从首位到最后一位非0位置的个数
return `${integerPart % 10}${solution(
parseFloat(`${~~(integerPart / 10)}.${decimal || numberSize}`)
)}`;
}
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');
assert.strictEqual(solution(1011), '1101');
assert.strictEqual(solution(-1001), '-1001');
function transformwrap(n){ var sum="" function transform(n){ if(n<=0){ return sum } var left=n%10 sum+=left n=(n-left)/10 transform(n) } transform(n) return sum }
function reverse(num) {
if (num < 0) {
return `-${reverse(Math.abs(num))}`
}
if (num < 10) {
return num;
}
return `${num % 10}${reverse(Math.floor(num / 10))}`
}
test:
reverse(123349495)
"594943321"
reverse(-123455)
"-554321"
reverse(-1234000055)
"-5500004321"
reverse(-12340000500005)
"-50000500004321"
function itoa (num) { return (num % 10 === 0 ? "" : num % 10) + (num >= 10 ? itoa(parseInt(num / 10)) : ""); }
`function convert(num){
if(!num){
return '';
}
return num % 10 + convert((num / 10) | 0);
}
var int = 12345;
console.log(typeof convert(int));`
let a = 2341
function b(num) {
return num.toString().split('').sort((x,y) => {return y - x}).join('')
}
let str = b(a)
console.log(str)
function rotate(nums) {
let str = ''
let current = nums%10
str = str+current
if (Math.floor(nums/10) > 0 ) {
return str+ rotate(Math.floor(nums/10))
} else {
return str
}
}
function f(num) {
let a = num%10
if(num<10) return num+''
return a + '' + f((num-a)/10)
}
function reverse(n) {
return n<0?'-'+reverse(Math.abs(n)):((n<10)?String(n): (n%10+''+reverse(Math.floor(n/10))));
}
function test(num){
num=num.toString();
if(num.length==1){
return num
}else{
return num.substring(num.length-1)+test(num.substring(0,num.length-1))
}
}
function print(num) {
let yu = num%10;
let shang = (num-yu)/10;
return shang ? ${yu}${print2(shang)}
: yu;
}
function sub(str){
let out
if(str.length>1){
out=sub(str.substring(1))+str[0]
}else{
return str
}
return out
}
function f2(number){
const str = number.toString();
if(number < 10){
return number.toString()
}else {
return str.slice(str.length-1, str.length)+ f2(str.slice(0, str.length-1));
}
}
考虑转化规则为:
1000逆序结果为'1' 而不是'0001'
-1000逆序结果为'-1' 而不是'-0001'
function calc(num) {
if (num < 0) {
return `-${+calc(Math.abs(num) + '')}`;
}
if (num < 10) {
return num;
}
let n = Math.floor(num / 10);
let m = num % 10;
let ans = `${m}${calc(n + '')}`;
return (typeof num === 'string') ? ans : `${+ans}`;
}
function helper(number) {
if (number === 0) return "";
return String(number % 10) + helper((number / 10) >> 0);
}
function reverseNumber(number) {
if (number === 0) return "0";
if (number < 0) return String(`-${helper(-1 * number)}`);
return helper(number);
}
如果大家对算法感兴趣可以关注我的leetcode题解
用 JavaScript 写一个函数,输入 int 型,返回整数逆序后的字符串。如:输入整型 1234,返回字符串“4321”。要求必须使用递归函数调用,不能用全局变量,输入函数必须只有一个参数传入,必须返回字符串。
function reverse(data) {
let arr = [];
let val = data % 10;
arr.push(val);
if (val) {
return arr.concat(reverse(parseInt(data / 10))).join("");
};
}
这样算不算玩文字游戏(😁
const convert = (number) => {
let num = number
while (num % 10 === 0) {
num = num / 10
}
const _reverse = (str) => {
return str.length <= 0 ? '' :`${_reverse(str.slice(1))}${str.slice(0,1)}`
}
return _reverse(`${num}`)
}
convert(1234)
convert(1230)
完了,难到我了,不能用爱发电了
function reverse(num) {
const str = num.toString();
if(str.length === 1) return str; // 如果切分成一个数就返回
const lastNum = str.slice(str.length -1); // 获取最后一个数
return lastNum + reverse(str.slice(0, str.length -1)); // 递归相加
}
入参数判断一下类型
const reverseNum = (num) => {
//let str_arr = num.toString().split('')
if (typeof num === 'number') {
return reverseNum(num.toString().split('').reverse())
} else if (Array.isArray(num)){
return num.join('')
} else {
throw '输入需为int型整数'
}
}
function reverse(nums){
const str = nums.toString()
if(str.length===0){
return str
}
return str.slice(-1) + reverse(str.slice(0,-1))
}
console.log(reverse(123456789))
function reverse(num) {
if(num.toString().length === 1){
return num
}
return reverse(num.toString().slice(1)) + num.toString()[0];
}
function convert(number) {
let s = number % 10
let num = parseInt(number / 10)
if(num <= 0) {
return s
}
return `${s}${convert(num)}`
}
convert(1234)
function convert(str) {
str = (str).toString()
if (str)
return convert(str.substr(1)) + str.substr(0, 1)
return ''
}
convert(12345)
const numToReverseStr = (num) => {
let result = num % 10;
if (num === 0) {
return ''
}
const newNum = Number(String(num).slice(0 ,-1));
return String(result) + numToReverseStr(newNum);
}
function getRerviseString(num) {
if (num < 10) return num;
return (num % 10) + '' + getRerviseString(((num - (num % 10)) / 10))
}
console.log(getRerviseString(4576567567))
考递归相关的知识
function reverse(num) {
return String(num).split('').reverse().join('');
}
function reverse2(num) {
if (num < 10) {
return String(num);
} else {
return String(num % 10) + reverse2(Math.floor(num / 10));
}
}
function reverse3(num) {
let result = '';
while(num) {
result += String(num % 10);
num = Math.floor(num / 10);
}
return result;
}
console.log(reverse(1234567));
console.log(reverse2(1234567));
console.log(reverse3(1234567));
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)
let intToStr = function(num) {
let num1 = num / 10;
let num2 = num % 10;
if (num1 < 1) {
return ${num}
} else {
num1 = Math.floor(num1);
return ${num2}${intToStr(num1)}
}
}
let result = intToStr(1234);
console.log(result, typeof result);
!function(num){
let span='';
while(Math.floor(num)>=1){
const temp = num%10;
num/=10;
span+=temp|0;
}
console.log(span)//4321
}(num=1234)
/**
* 用 JavaScript 写一个函数,输入 int 型,返回整数逆序后的字符串。如:输入整型 1234,返回字符串“4321”。要求必须使用递归函数调用,不能用全局变量,输入函数必须只有一个参数传入,必须返回字符串。
* @param {Number} num
* @returns {String}
*/
function reverse(num) {
let arr = Number.isInteger(num) ? ['', num.toString()] : num;
if (arr[1].length > 0) {
let copyArr = [...arr[1]];
return reverse([(arr[0] += copyArr.pop()), copyArr.join('')]);
}
return arr[0];
}
console.log(reverse(1234));
function reverse(num) {
if (num) return reverse(num.toString().substring(1)) + num.toString().substring(0, 1);
return '';
}
console.log(reverse(1234));
function ints(num) {
var str = String(num),i=str.length;
if(i>1) {
var newNum = Number(str.substring(0,i-1));
var d = str.substring(i-1);
return d+ints(newNum);
}else {
return num;
}
}
ints(1234);
// 当前仅考虑非负整数
function intReverse(num) {
if(!/^[1-9]\d*|0$/.test(num)) {throw new Error('请传入非负整数')};
strNumber = num + '';
if(strNumber.length === 1) {return strNumber};
let tail = strNumber.slice(-1);
let rest = parseInt(strNumber.slice(0,-1));
return tail + intReverse(rest)
}
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)) }
test的输入必须为整数,输出必须为字符串
function intToStringReverse(num){
if(num <= 0) return ""
return "" + num % 10 + intToStringReverse(parseInt(num / 10))
}
如果能传两个参数的话,这个算法将会更好。
尾递归调用。性能上好不少。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"
function func(v) {
var r = [...arguments][1] || ''
v += ''
if (v.length < 1) return r * 1
r += v.slice(v.length-1)
v = v.slice(0, v.length-1)
return func(v, r)
}
在您代码上加了俩点:1、省去第二个参数,2、输出数字格式
function reverse(num) {
const input = new String(num)
if (input.length <= 1) return input;
return input[input.length - 1] + reverse(input.slice(1, input.length - 1)) + input[0];
}
function bilibili(num) {
if (num.toString().length < 2) {
return num.toString()
}
let a = Math.floor(num / 10)
let b = num % 10
return ${b}${bilibili(a)}
}
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)
思路也太巧妙了
function reverse(num) {
if (!num) return '';
return '' + num % 10 + reverse(parseInt(num / 10));
}
const num = 1234;
function func(number) {
return number > 9 ? String(number % 10) + func(Math.floor(number / 10)) : String(number);
}
console.log(func(1234), typeof func(1234))
`
function reverseInt(int) {
if(!Number.isInteger(int) || arguments.length !== 1) {
return new Error('only one params was required and must be a interger number')
}
int += ''
const cut = int.slice(-1)
if(int.length == 1) {
return int
} else {
int = int.substr(0,int.length - 1)
return cut + reverseInt(int)
}}
console.log(typeof reverseInt(23645583)) // 'string'
console.log(reverseInt(23645583)) // 38556432
console.log(reverseInt(23645583.123)) // 报错
console.log(reverseInt(123,23645583)) // 报错
`
function formatNumber(num) {
let str = num.toString();
const length = str.length;
let value = '';
if (length > 1) {
let subStr = str.substr(0, length - 1)
let next = parseInt(subStr)
value = str.substr(length - 1, 1) + formatNumber(next)
} else {
value = str.substr(length - 1, 1)
}
return value
}
let value = formatNumber(2020)
console.log(value)
// "0202"
function reserve(num) {
let str = num.toString();
let len = str.length
let first = str[len - 1]
if (str.length > 1) {
return first + reserve(str.substring(0, len-1))
} else {
return first
}
}
console.log(reserve(423456777));
console.log(typeof(reserve(423456777)));
function reverseInt(num) {
return num < 10
? num
: ${num % 10}${reverseInt(parseInt(num / 10))}
}
这样它不香么
function r (n) {
if (n.length <= 1) {
return n
}
const first = n[0]
const rest = n.slice(1)
return r(rest) + first
}
function reverse(num) {
if (num===0) return '';
return parseInt(num%10) + '' + reverse(parseInt(num/10))
}
function outerFn(num){
var count=0
var str=num+""
var l=str.length
var result=""
function innerFn(){
if(count==l) return console.log(result)
result+=str.slice(-count-1)[0]
count++
innerFn()
}
return innerFn()
}
outerFn(31234)//43213
负数+尾递归
function reverseNumber(number) {
const flag = number < 0 ? -1 : 1;
number = Math.abs(number);
const pre = [...arguments][1] || '';
if (number < 10) {
return pre + String(number);
}
return reverseNumber(Math.floor(number / 10), pre + flag * (number % 10));
}
代码 如下,支持负数
function reverseNum(num) {
if(num < 0) return '-' + reverseNum(Math.abs(num));
let str = num.toString();
return str.length === 1 ? str : str.slice(-1) + reverseNum(str.slice(0,-1));
}
function reverse(num, i = 0, acc = '') {
if (typeof num == 'number') {
num += '';
i = num.length - 1;
}
if (i < 0) {
return acc;
}
acc += num[i];
return reverse(num.substring(0, i--), i, acc);
}
reverse(1234); // 4321
// 符合ES6尾调用优化规则
function reverse(num) {
if(num > 10) {
let a = num / 10
let b = num % 10
return b + reverse((num - b) / 10)
}else if(num < 0) {
return reverse(-num) + '-'
}else {
return num + ''
}
}
function reverseNum(num){
if(num<10){
return String(num)
}
let min1 = Math.floor(num/10);
let min2 = num%10;
if(min1<10){
return `${min2}${min1}`;
}
return `${min2}${reverseNum(min1)}`
}