力扣-9-回文数
抛开空间复杂度O(N)的解法(转字符串),要想O(1),还是反转的思想
确切地说,是造一个长度为原数字位数一半、各位数与原数字反转的数
例如:原数字1234,要构造的就是43
原数字123,要构造的就是32
- 怎么取各位数字呢?答案是“%”与“/”操作的组合
这里要注意的一点是,因为两个运算操作都是对10操作,那么10的倍数必须特殊处理
比如:原数字1000,在代码条件中会一直循环(因为反转后的数字始终为0)直到等于1,结果是11,返回true
这里还要特别额外处理“0”的情况==
- 怎么判断到没到一半?答案是原数字剩下的部分小于反转数字的时候
对于单数长度,反转数字一定会多一位时
对于双数长度可能多一位,也可能同位
class Solution { public: bool isPalindrome(int x) { if (x < 0|| (x!=0&&x % 10 == 0)) return false; // 这个情况被下面包含了 // if (x < 10) return true; int reverse = 0; // 这个条件是判断反转到一半了 while (x > reverse) { reverse = reverse * 10 + x % 10; x /= 10; } // 后一个条件是为了处理数字位数是单数的情况 // 考虑前两位大于后两位的反转的情况… if (x == reverse||x==reverse/10) return true; else return false; } };
想一想3412这个例子,反转后分别为:3和214
…感觉越想越复杂了
本文作者:YaosGHC
本文链接:https://www.cnblogs.com/yaocy/p/16662515.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步