回文数算法描述算法实现算法解析避坑提醒溢出判断情况 1res MAX / 10情况 2res MAX / 10情况 3res MAX / 10算法描述给你一个整数 x 如果 x 是一个回文整数返回 true 否则返回 false 。回文数是指正序从左向右和倒序从右向左读都是一样的整数。例如121 是回文而 123 不是。 -121不是回文因为 从右向左读, 为 121-提示不用将整数转换成字符串处理。算法实现publicbooleanisPalindrome(intx){if(x0){//因为负数肯定不是回文数returnfalse;}intreversXreverse(x);returnreversXx;}//数字翻转publicintreverse(intx){intres0;intMAXInteger.MAX_VALUE;//2147483647while(x!0){intdigitx%10;//取当前最后一位数字,比如12345取5xx/10;// 去掉最后一位比如12345变成1234// 预判溢出,如果 res * 10 digit MAXif(resMAX/10||(resMAX/10digit7)){return0;}resres*10digit;}returnres;}算法解析避坑提醒不能先算 res*10digit 再比较因为可能会超出 int 范围会发生数值截断判断失效不能用 long 中转部分面试要求纯 int 运算不允许更大类型溢出判断MAX2147483647MAX/10214748364情况 1res MAX / 10设 res 214748365res * 10 2147483650哪怕 digit 0结果是 21474836502147483650 2147483647一定溢出这里的逻辑是res 只要大于 214748364res×10 本身就已经大于 MAX再加任何 0~9 的 digit只会更大必然溢出。情况 2res MAX / 10res*10 2147483640digit ≤72147483640 digit ≤ 2147483647安全digit ≥82147483640 digit ≥ 2147483648溢出情况 3res MAX / 10res×10 最大为 2147483630加 9 也只有 2147483639 MAX永远安全
算法:回文数
回文数算法描述算法实现算法解析避坑提醒溢出判断情况 1res MAX / 10情况 2res MAX / 10情况 3res MAX / 10算法描述给你一个整数 x 如果 x 是一个回文整数返回 true 否则返回 false 。回文数是指正序从左向右和倒序从右向左读都是一样的整数。例如121 是回文而 123 不是。 -121不是回文因为 从右向左读, 为 121-提示不用将整数转换成字符串处理。算法实现publicbooleanisPalindrome(intx){if(x0){//因为负数肯定不是回文数returnfalse;}intreversXreverse(x);returnreversXx;}//数字翻转publicintreverse(intx){intres0;intMAXInteger.MAX_VALUE;//2147483647while(x!0){intdigitx%10;//取当前最后一位数字,比如12345取5xx/10;// 去掉最后一位比如12345变成1234// 预判溢出,如果 res * 10 digit MAXif(resMAX/10||(resMAX/10digit7)){return0;}resres*10digit;}returnres;}算法解析避坑提醒不能先算 res*10digit 再比较因为可能会超出 int 范围会发生数值截断判断失效不能用 long 中转部分面试要求纯 int 运算不允许更大类型溢出判断MAX2147483647MAX/10214748364情况 1res MAX / 10设 res 214748365res * 10 2147483650哪怕 digit 0结果是 21474836502147483650 2147483647一定溢出这里的逻辑是res 只要大于 214748364res×10 本身就已经大于 MAX再加任何 0~9 的 digit只会更大必然溢出。情况 2res MAX / 10res*10 2147483640digit ≤72147483640 digit ≤ 2147483647安全digit ≥82147483640 digit ≥ 2147483648溢出情况 3res MAX / 10res×10 最大为 2147483630加 9 也只有 2147483639 MAX永远安全