Open yygmind opened 5 years ago
function intToReverseString(num) {
if(num < 10) {
return num
}
let i = num % 10
let ca = (num - i) / 10
return i + '' + intToReverseString(ca)
}
题目其实出的并不好,我不知道为什么必须要求只能接受一个数值参数,因为这样写出来的递归代码无法进行尾递归优化,效率很低。
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'
function a(num) {
if (num.length === 1) {
return num[0];
}
return a(num.slice(1)) + a(num[0]);
}
console.log(a("123".split("").join("")));
function reverse(intNum) {
let str = intNum + '';
if (str === 'NaN') return '';
return reverse(parseInt(str.substr(1))) + str[0];
}
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(); } }
function reverseNumber (number) {
const numberStr = number.toString()
return numberStr.length === 1 ? numberStr : number % 10 + reverseNumber(Math.floor(number / 10))
}
reverseNumber(12345)
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) }
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,输出就是数字类型了
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)
}
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
function reverseNumToStr(num) { let str=''; if(num<10) { str+=String(num)} else { str+=String(num%10); str+= reverseNumToStr(Math.floor(num/10)) } return str; }
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)}`
}
思路:将整型转化成字符串,然后借用扩展运算符将字符串转化为数组,通过数组的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 )
}
迭代不香吗?
function reverse(num) {
let res = 0
while (num != 0) {
res = res * 10 + (num % 10)
num = (num / 10) >> 0
}
return res.toString()
}
递归自己改~
迭代不香吗?
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()
}
}
f = (v) => v<0 ? '-'+ f(-v) : v < 10 ? v : `${v % 10}${f(Math.floor(v / 10))}`
f(123456789)
f(-123456789)
一行代码
`
function reserve(n){
return n ? (n % 10 + reserve((n / 10) | 0)) : ''
}
`
const reverse = (int)=>{
if(!int)return "";
let i = int.toString().split("");
return i.splice(-1,1).join() + reverse(i.join(""));
}
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;
}
}
function reverse2Str(num) {
if(typeof num === "number") {
return reverse2Str(String(num).split('').reverse().join(''));
}else {
return Number(num);
}
}
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 '';
}
}
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 }
function resever(int) {
let str= ''
let arr = (int + '').split('')
while(arr.length) {
str += arr.pop()
}
return str
}
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
}; `
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
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)
}
const reverse = function(num) {
const numA = Math.floor(num / 10)
const numB = num % 10
if (numA !== 0) {
return '' + numB + revert(numA)
} else {
return numB
}
}
const run = (n) => {
let s = String(n)
if(s.length == 1) return s
return run(+s.slice(1))+s[0]
}
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)
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))
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))
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));
看了大家写的 再看看我写的 哭了....
function reverseString(str) {
// 转换整型
var str = str.toString()
if (str.length === 1) return str;
return reverseString(str.slice(1)) + str[0];
}
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)); }
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
function reverse (v) {
if (!v) return ''
return foo(String(v).slice(1)) + String(v)[0]
}
如此简单!
function fn(val) {
return !val ? '' : val % 10 + fn(Math.floor(val / 10));
}
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))))
}
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;
}
const reverseNum = num => {
if (num === 0) {
return '';
}
const mod = num % 10;
return `${mod}` + reverseNum(Math.floor(num / 10));
}
what f***
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;
}
function reverse(num){ return (num + "").length ? (reverse((num + "").slice(1)) + (num + "")[0]) : "" }
function reverse(num) {
// 得到个位数
var mod = num % 10
// 剩余位数
var n = Math.floor(num / 10)
if(n <= 0) {
return num
} else {
return '' + mod + reverse(n)
}
}
function toreverseString(int){
if(!int&&int!==0) return ''
var arr=int.toString().split('');
var str = arr.pop()
return str+toreverseString(arr.join(''))
}
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()一下么
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
用 JavaScript 写一个函数,输入 int 型,返回整数逆序后的字符串。如:输入整型 1234,返回字符串“4321”。要求必须使用递归函数调用,不能用全局变量,输入函数必须只有一个参数传入,必须返回字符串。