LeetCode 202 快乐数

今天再次做到需要int转化成String,从而方便运算的题目。(当然还可以直接使用int运算也是没问题的)

再次出现了我容易弄混淆的问题,Integer.valueOf和ASCII码转化的差异?

其实之前我以及有记录过该问题,详见我的博客

Integer.valueOf()用于字符和字符串的区别_paypayphone的博客-CSDN博客

举个例子:

Integer.valueOf("1")得到的是1,

而Integer.valueOf('1')得到的是49,是他的ASCII码。

这就好比,我们可以直接用字符进行加减,int add = '1' + 'a'; 等于他们的ASCII码之和,他们其实并没有经历强制转化但是我们没办法将字符串进行加减,只能进行拼接!

java 复制代码
class Solution {
    boolean result = false;
    public boolean isHappy(int n) {
        dfs(n,1);
        return result;
    }

    public void dfs(int n, int count) {
        if(n == 1) { 
            result = true;
            return;
        }
        
        if(count == 10000) {
            return;
        }
        String s = "" + n;
        int squareSum = 0;
        for(int i=0;i<s.length();i++) {
            squareSum += (s.charAt(i)-'0')*(s.charAt(i)-'0');
            // squareSum += Integer.valueOf(s.charAt(i)+"") * 
            //Integer.valueOf(s.charAt(i)+"");  //也是一样的效果
            //前者是通过ASCII码相减,转化成int,后者是直接将字符串应用于Integer.valueOf
        }
        
        count++;
        dfs(squareSum, count);

    }
}

然后说回方法本身,我的方法是循环到10000次如果得不到1就自动停止递归,并且用了比较占内存空间的字符串类型。

其实更应该直接使用int计算squareSum,并且充分理解题意;从而实现用哈希集合检验是否是无限循环。

相关推荐
啊阿狸不会拉杆25 分钟前
人工智能数学基础(二):初等数学
人工智能·python·算法
元亓亓亓34 分钟前
LeetCode热题100--560.和为K的子数组(前缀和)--中等
算法·leetcode·职场和发展
Phoebe鑫40 分钟前
数据结构每日一题day12(链表)★★★★★
数据结构·算法·链表
Vacant Seat1 小时前
贪心算法-跳跃游戏II
算法·游戏·贪心算法
夜松云1 小时前
从对数变换到深度框架:逻辑回归与交叉熵的数学原理及PyTorch实战
pytorch·算法·逻辑回归·梯度下降·交叉熵·对数变换·sigmoid函数
八股文领域大手子2 小时前
深入浅出限流算法(三):追求极致精确的滑动日志
开发语言·数据结构·算法·leetcode·mybatis·哈希算法
啊阿狸不会拉杆2 小时前
人工智能数学基础(一):人工智能与数学
人工智能·python·算法
一捌年2 小时前
java排序算法-计数排序
数据结构·算法·排序算法
freexyn3 小时前
Matlab自学笔记五十二:变量名称:检查变量名称是否存在或是否与关键字冲突
人工智能·笔记·算法·matlab
渭雨轻尘_学习计算机ing3 小时前
二叉树构建算法全解析
算法·程序员