第 99 题:编程算法题
用 JavaScript 写一个函数,输入 int 型,返回整数逆序后的字符串。如:输入整型 1234,返回字符串 4321。要求必须使用递归函数调用,不能用全局变量,输入函数必须只有一个参数传入,必须返回字符串。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
用 JavaScript 写一个函数,输入 int 型,返回整数逆序后的字符串。如:输入整型 1234,返回字符串 4321。要求必须使用递归函数调用,不能用全局变量,输入函数必须只有一个参数传入,必须返回字符串。
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(59)
如此简单!
function a(n){
function reverse(num){
}
what f***
function reverse(num){ return (num + "").length ? (reverse((num + "").slice(1)) + (num + "")[0]) : "" }
小于10的时候toString()一下么
这可能是不依赖任何API的最佳实践了吧
const reverseInt = num => (num/10 >> 0) ? `${num%10}${reverseInt(num/10 >> 0)}` : `${num}`
// 用递归。第一步 处理递归到底的条件 第二步 构建一个更小问题的解。 第三步 用更小问题的解构建出原问题的解
第一步 很明显
第二步 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)
}
function numberToString(num) {
let a = num % 10
let b = Math.floor(num/10)
if(b === 0) return a
return a + '' + numberToString(b)
}
function reverse(val) {
if (!val) return ''
let str = val + ''
return reverse(+str.slice(1)) + str.charAt(0)
}
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))
科里化一下就好了,在外面封装一层函数只接收参数
v
输入的数字小于 10 的时候返回的是整形
const calc = nums => nums.toString().split('').reduce((sum, num) => num + sum);
贴上两种方法
你这个不行
先转成字符串,然后根据长度递归调用
参考了各位大佬的思路,用%10来取最后一位,用/10来减少位数,用>>0来去除小数点,最后用es6的模板字符串来返回字符串类型的结果
int型整数也包含负数,发现大多数解法(包括我的)都只考虑传入数值为正数的情况,题干中也没有相关示例,求解 @yygmind
var str = '12345';
function revert(str){
return str.length > 0 ? revert(str.slice(1)) + str[0] : str;
}
我觉着这个还是得加一些异常case,比如1000,或者负数
function abc(n){
if(n>0){
return abc(Math.floor(n/10)) + n %10 + ''
}else {
return n
}
}
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));
}
如果能传两个参数的话,这个算法将会更好。
尾递归调用。性能上好不少。
思路:先将传入的参数转为string,取该字符串的第二位至末尾作为下一次递归函数的参数,判断当前字符串长度是否大于1,大于1则递归调用,等于1就返回这个字符串
`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)`
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 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);`
其实这种直接使用JavaScript的API更简单直观。