今天再次做到需要int转化成String,从而方便运算的题目。(当然还可以直接使用int运算也是没问题的)
再次出现了我容易弄混淆的问题,Integer.valueOf和ASCII码转化的差异?
其实之前我以及有记录过该问题,详见我的博客
Integer.valueOf()用于字符和字符串的区别_paypayphone的博客-CSDN博客
举个例子:
Integer.valueOf("1")得到的是1,
而Integer.valueOf('1')得到的是49,是他的ASCII码。
这就好比,我们可以直接用字符进行加减,int add = '1' + 'a'; 等于他们的ASCII码之和,他们其实并没有经历强制转化;但是我们没办法将字符串进行加减,只能进行拼接!
- 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
- 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,并且充分理解题意;从而实现用哈希集合检验是否是无限循环。