美文网首页iOS面试题解析前端让前端飞
《前端面试题》- 编程题- 数字交换一次得到最大的数字

《前端面试题》- 编程题- 数字交换一次得到最大的数字

作者: 张中华 | 来源:发表于2021-03-02 17:14 被阅读0次

输入一个数字(整数),交换两位数字,最多交换一次,输出可以得到的最大的数字,如输入:1234交换1,4后,得到4231;

        function exchangeNum(num) {
            let result;
            if (num > 0 && Number.isInteger(num)) {
                const numArr = [...num.toString()];
                const startPostion = findChangePosition(numArr);
                const notNeedChange = numArr.slice(0, startPostion);

                const needChange = numArr.slice(startPostion);
                const maxNum = findMax(needChange);
                const maxIndex = needChange.lastIndexOf(maxNum);

                [needChange[0], needChange[maxIndex]] = [needChange[maxIndex], needChange[0]]
                result = Number(notNeedChange.concat(needChange).join(''));
            }

            return result;
        }


        function findChangePosition(numArr) {
            const maxNum = findMax(numArr);
            let startPosition = 0;
            for (let i = 0; i < numArr.length; i++) {
                startPosition = i;
                if (maxNum !== numArr[i]) {
                    break;
                }
            }
            return startPosition;
        }

        function findMax(arr) {
            return Math.max.apply(null, arr).toString();
        }

        function findMin(arr) {
            return Math.min.apply(null, arr).toString();
        }

        // Test data
        console.log(exchangeNum(1234));
        console.log(exchangeNum(4321));
        console.log(exchangeNum(14234));
        console.log(exchangeNum(41324));

相关文章

  • 《前端面试题》- 编程题- 数字交换一次得到最大的数字

    输入一个数字(整数),交换两位数字,最多交换一次,输出可以得到的最大的数字,如输入:1234交换1,4后,得到4231;

  • 670. 最大交换

    【Description】给定一个非负整数,你至多可以交换一次数字中的任意两位。返回你能得到的最大值。 示例 1 ...

  • 31.leetcode题目讲解(Python):下一个排列

    题目: 这道题的主要思路是当遇到后面的数字大于前面的数字(假设索引为i)时,就反向查找次大的数字,然后交换两个数字...

  • 670. 最大交换

    给定一个非负整数,你至多可以交换一次数字中的任意两位。返回你能得到的最大值。 示例 1 : 输入: 2736输出:...

  • 百词斩笔试总结

    第一题:输入一段只含有数字和字符串的字符串,则取出各个数字,获得最大值。 第二题:输入n个数字,这n个数字不能重复...

  • 经典排序算法——冒泡排序

    原理是临近的数字两两进行比较,按照从小到大或者从大到小的顺序进行交换, 这样一趟过去后,最大或最小的数字被交换到了...

  • C语言 经典排序算法 - 冒泡排序Bubble sort

    原理是临近的数字两两进行比较,按照从小到大或者从大到小的顺序进行交换,这样一趟过去后,最大或最小的数字被交换到了最...

  • Synchronized到底锁住的是谁?

    先来一道并发编程笔试题 题目:利用5个线程并发执行,num数字累计计数到10000,并打印。 这道并发编程面试题,...

  • 面试题 16.01. 交换数字

    编写一个函数,不用临时变量,直接交换numbers = [a, b]中a与b的值。 示例: 输入:numbers ...

  • 面试题 16.01. 交换数字

    题意:编写一个函数,不用临时变量,直接交换numbers = [a, b]中a与b的值。 解法1:异或满足交换律和...

网友评论

    本文标题:《前端面试题》- 编程题- 数字交换一次得到最大的数字

    本文链接:https://www.haomeiwen.com/subject/enwefltx.html