一开始做这个题的时候有点懵懵的,后面理了下思路,踩了几个坑完成了 然后看力扣的解析没有java的答案,评论区大佬的答案都是高度精简的,把判断位数还有计算合并到一起了,也不考虑保存 然后就用这个贴记录下思路
这是我个人的思路
class Solution {
public int subtractProductAndSum(int n) {
int bit = 0;
int temp = n;
// 判断一个数的位数
while(temp>0){
temp /= 10 ;
++bit;
}
// 按位保存到数组里
int array[] = new int[bit];
for(int i=0;i< array.length ;i++){
array[array.length -1 -i] = (int) (n / Math.pow(10, i) %10);
}
// 取出数组的数进行计算
int sum = 0;
int num = 1;
for(int j : array){
sum += j;
num *= j;
}
return num - sum;
}
}
这是力扣评论区点赞最高的大佬的答案
class Solution {
public int subtractProductAndSum(int n) {
int sum = 0;
int product = 1;
while (n > 0) {
int num = n % 10;
sum += num;
product *= num;
n /= 10;
}
return product - sum;
}
}
作者:hncboy
链接:https://leetcode.cn/problems/subtract-the-product-and-sum-of-digits-of-an-integer/solution/java-qu-yu-ji-suan-by-hncboy/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
一开始只是拿他的输入n,234来进行分析的,后来发现这是需要对任意整数来进行分析的,然后花了点时间,首先就是判断整数位数,分析发现除10就好了,个位除10一定是小数,这个时候自动转为int类型,就是0,然后加个标志bit就好了,除一次10就自动累加一次,因为不知道循环次数所以用while循环,循环条件方面,因为最终的值为0,整数又是大于零,也就是说正常情况下是大于零,为0和小于零都是不满足条件的,所以循环条件为大于零
然后就是按位保存,想了一下这个不就是跟字符串差不多么,字符串本质就是字符数组,一串数字也可以当作整数数组处理,后面有需要还可以转换成字符串,再转换成数字都是很方便的,就分开放到整数数组里了
最后计算就直接foreach就好了