本文主要是介绍字节跳动高频面试题-7.整数反转,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
解法都在代码里,不懂就留言或者私信
这个题排在字节跳动半年榜的第64题,但是题目确实远非如此,我知道的最近一个月至少考过4次,还是必须掌握的
class Solution {public int reverse(int x) {/**一位的整数,不管是整数还是负数,没有什么可反转的,反转了和自己也一样 */if(x >= -9 && x <= 9) {return x;}/**负数的承载范围比较大,统一转换为负数处理,转换之前记录一下是否为正数如果是正数,最后的结果取相反数 */boolean isPositive = x > 0;x = isPositive? -x : x;/**基本思路是按照每次取余然后乘在高位,然后往高位一位一位取余重复操作这个过程中一定要注意是否超过了int的范围,比如Integer.MAX_VALUE和MIN_VAVLUE相反之后都会超出超出直接返回0*//**当前数到了多少*/int curNum = 0;/**记录两个值minLastDigitNum和minDivide10分别表示Integer.MIN_VALUE%10和Integer.MIN_VALUE/10之后的值,这个值用于反转过程中的越界判断 */int minLastDigitNum = Integer.MIN_VALUE % 10;int minDivide10 = Integer.MIN_VALUE /10;while(x != 0) {/**要计算的下一位 */int curDigitNum = x %10;/**任何一种发生都说明要越界了,越界就返回0 */if(curNum < minDivide10 || (curNum == minDivide10 && curDigitNum < minLastDigitNum)) {return 0;}/**使用之前的结果*10+当前位 */curNum = curNum * 10 + curDigitNum;x = x / 10;}/**最后根据正负数确认最终结果,正数的注意处理越界 */return isPositive? (curNum == Integer.MIN_VALUE? 0 : -curNum) : curNum;}
}
这种题估计写出来的都是最优解吧,哈哈
这篇关于字节跳动高频面试题-7.整数反转的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!