首页 > 编程语言 >算法题分析:反转整数

算法题分析:反转整数

时间:2023-06-02 13:33:28浏览次数:25  
标签:10 return reverse 反转 31 整数 算法 num ans

最近刷到了一道medium难度的算法题,比较典型,可以用语法特性和常规解法来解决。题目如下:

给定一个32字节的有符号整型数字x,将x反转过来返回。如果反转x会让其数值超出32位有符号整型数字范围[-2^31, 2^31 -1],那么就返回0。
假设运行环境不允许你存储64位整型数字(有符号或者无符号)。
Example 1:

Input: x = 123
Output: 321
Example 2:

Input: x = -123
Output: -321
Example 3:

Input: x = 120
Output: 21

约束条件:
-2^31 <= x <= 2^31 - 1

反转整数有两个大的思路,一个是把数字转换成字符串,然后把正负号单独保存,针对纯数字的字符串进行反转,当然还是要注意超出32位整型数值范围要返回0的边界情况。几乎所有编程语言都有大量针对字符串的内置函数,所以该算法非常取巧。

用js具体的解法如下:

/**
 * @param {number} x
 * @return {number}
 */
var reverse = function(x) {
    let ans = x.toString().split('').reverse().join('');
    if (x < 0) {
        ans = ans.substr(0, ans.length -1) * -1;
    }
    if (x >= Math.pow(2, 31) -1 || x < -1 * Math.pow(2, 31)) return 0;
    return ans;
}

这个解法比较巧妙,绕过了传统思维里面针对数字的处理,但是空间复杂度效率不高。

另外一种解法就是通过除10来反转数字,具体如下:

var reverse = function(x) {
    if (x / 10 < 1) return x;
    let reverse  = 0;
    const isNegative = (x < 0) ? -1 : 1;
    let num  = num * isNegative;

    while (num >= 1) {
        diff = Math.floor(num % 10);
        reverse = reverse * 10 + diff;
        num = num /10;
    }

    if (num > Math.pow(2, 31) - 1) return 0;
    return num * isNegative;

}

标签:10,return,reverse,反转,31,整数,算法,num,ans
From: https://www.cnblogs.com/freephp/p/17451534.html

相关文章

  • 算法——字符串(一)
    1、给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。1classSolution{2publicintlengthOfLongestSubstring(Strings){3intlen=s.length();4intmax=0;5intright=0;6Set<Character>set=new......
  • 最短路与生成树算法
    写在前面最短路部分的代码还是3月的,奇丑无比,大家见谅……最短路单源最短路径首先我们介绍一些基本概念。由于是单源最短路,我们定义一个起点\(s\),\(dis_u\)表示起点\(s\)到节点\(u\)的最短路长度。一般来讲,对于一条为\(w\)的边\(u\tov\),如果目前的最短路是正确......
  • 代码随想录算法训练营第二十三天|669. 修剪二叉搜索树
    [参考链接]669.修剪二叉搜索树 [代码]1#Definitionforabinarytreenode.2#classTreeNode(object):3#def__init__(self,val=0,left=None,right=None):4#self.val=val5#self.left=left6#self.right=right......
  • python算法学习——第1天
    目录1、3,5,7的倍数判定2、鸡兔同笼3、计算有n个字符串中最长的字符串长度4、输出10个不重复的英文字母5、统计一段文字的单词个数并按字母顺序排序输出6、字典合并7、最大公约数&最小公倍数8、输出全排列9、输出<=n的全部回文数10、重复元素判定1、3,5,7的倍数判定num=int(inp......
  • STL algorithm算法
    Functionsin<algorithm>Non-modifyingsequenceoperations:all_ofTestconditiononallelementsinrange(functiontemplate)any_ofTestifanyelementinrangefulfillscondition(functiontemplate)none_ofTestifnoelementsfulfillconditi......
  • 剑指 Offer 67. 把字符串转换成整数
    题目描述:写一个函数StrToInt,实现把字符串转换成整数这个功能。不能使用atoi或者其他类似的库函数。 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合......
  • 13. 罗马数字转整数
    class Solution {        Map<Character, Integer> maps = new HashMap<>(){{        put('I', 1);        put('V', 5);        put('X', 10);        put('L', 50);        put('C', 100);       ......
  • 算法学习day39动态规划part02-62、63
    packageLeetCode.DPpart02;/***62.不同路径*一个机器人位于一个mxn网格的左上角(起始点在下图中标记为“Start”)。*机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。*问总共有多少条不同的路径?*示例:*输入......
  • 算法学习day41动态规划part03-343、96
    packageLeetCode.DPpart03;/***343.整数拆分*给定一个正整数n,将其拆分为k个正整数的和(k>=2),并使这些整数的乘积最大化。*返回你可以获得的最大乘积。*示例:*输入:n=2*输出:1*解释:2=1+1,1×1=1。**/publicclassIntegerBre......
  • 12. 整数转罗马数字
      贪心策略:classSolution{int[]values={1000,900,500,400,100,90,50,40,10,9,5,4,1};String[]symbols={"M","CM","D","CD","C","XC","L","XL","X","IX&q......