胡杨河市网站建设_网站建设公司_服务器维护_seo优化
2025/12/17 20:52:22 网站建设 项目流程

9. 回文数

简单把几个用例拿出来,然后先解决大多的用例,然后处理少量用例,问题就解决了。

class Solution {public boolean isPalindrome(int x) {if (x < 0) {return false;}if (x < 10) {return true;}int y = 0;int x1 = x;while (x1 > 0) {int tmp = x1 % 10;x1 = x1 / 10;y = y * 10 + tmp;}return x == y;}
}

还是看看官方的题解吧,思路比我这个巧妙

class Solution {public boolean isPalindrome(int x) {// 特殊情况:// 如上所述,当 x < 0 时,x 不是回文数。// 同样地,如果数字的最后一位是 0,为了使该数字为回文,// 则其第一位数字也应该是 0// 只有 0 满足这一属性if (x < 0 || (x % 10 == 0 && x != 0)) {return false;}int revertedNumber = 0;while (x > revertedNumber) {revertedNumber = revertedNumber * 10 + x % 10;x /= 10;}// 当数字长度为奇数时,我们可以通过 revertedNumber/10 去除处于中位的数字。// 例如,当输入为 12321 时,在 while 循环的末尾我们可以得到 x = 12,revertedNumber = 123,// 由于处于中位的数字不影响回文(它总是与自己相等),所以我们可以简单地将其去除。return x == revertedNumber || x == revertedNumber / 10;}
}

. 算法元认知能力提升框架

4.1 解题前思考清单

  1. 边界条件
  • 负数、0、末尾0、最大/最小值
  • 数据类型溢出风险
  1. 问题本质
  • 回文的数学特性:对称性
  • 能否利用对称性减少计算量?
  1. 复杂度分析
  • 时间:能否从O(n)优化到O(n/2)?
  • 空间:能否O(1)?
  1. 特殊情况
  • 单数字、双数字
  • 奇偶位数差异

4.2 代码优化思考路径

原始思路↓ 识别模式(对称性)↓ 优化方向(只处理一半)↓ 处理边界(奇偶、特殊情况)↓ 验证正确性

6. 元认知提升要点

  1. 从"模拟"到"洞察"
  • 不要只满足于解决问题
  • 思考问题的数学/逻辑本质
  1. 提前考虑边界
  • 养成先列特殊情况的习惯
  • 负数、0、溢出是整数问题的常见陷阱
  1. 空间换时间思考
  • 这里虽然都是O(1)空间
  • 但时间减少了一半,是重要优化
  1. 测试驱动思考
  • 12321(奇数位)
  • 1221(偶数位)
  • 10、100(末尾0)
  • -121、0

7. 总结

差距主要在算法洞察力边界完整性 。提高方向:

  1. 多思考问题的数学特性
  2. 建立系统的边界检查习惯
  3. 追求最优解,不满足于可行解
  4. 理解每个优化的理论依据

这种差距的缩小需要: 刻意练习 + 深度思考 + 模式识别 。每次解题后,问自己:"这是最优解吗?还能更好吗?"

66. 加一

自己做的

class Solution {public int[] plusOne(int[] digits) {int carry = 1;int len = digits.length;for (int i = len - 1; i >=0; i--) {int tmp = digits[i] + carry;if (tmp >= 10) {carry = 1;} else {carry = 0;}digits[i] = tmp % 10;if (carry == 0) {return digits;}}int[] res = new int[len + 1];res[0] = 1;return res;}
}

下面是官方的解法,更加的间接,没有那么多变量去判断,理由特殊性,如果发现元素=9,那么置为0即可,否则发现第一个小于9的,则直接+1,然后返回

class Solution {public int[] plusOne(int[] digits) {int len = digits.length;for (int i = len - 1; i >=0; i--) {if (digits[i] < 9) {digits[i] = digits[i] + 1;return digits;} else {digits[i] = 0;}}int[] res = new int[len + 1];res[0] = 1;return res;}
}class Solution {public int[] plusOne(int[] digits) {int n = digits.length;for (int i = n - 1; i >= 0; --i) {if (digits[i] != 9) {++digits[i];for (int j = i + 1; j < n; ++j) {digits[j] = 0;}return digits;}}// digits 中所有的元素均为 9int[] ans = new int[n + 1];ans[0] = 1;return ans;}
}作者:力扣官方题解
链接:https://leetcode.cn/problems/plus-one/solutions/1057162/jia-yi-by-leetcode-solution-2hor/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

主要差距

  1. 思维抽象层次 :我关注过程模拟,官方关注规律总结
  2. 代码简洁性 :官方解法更精炼
  3. 问题洞察 :官方利用了"只是加1"的特殊性

缩小差距的方法

  1. 解决具体问题前,先分析其特殊性
  2. 尝试从 结果反推过程,寻找规律
  3. 写完代码后,问自己:"还能更简单吗?"
  4. 比较不同解法的核心差异,理解背后的思考方式

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询