力扣---2020.3.12

1071. 字符串的最大公因子

  • 辗转相除法:用较大数除以较小数,再用出现的余数(第一余数)去除除数,再用出现的余数(第二余数)去除第一余数,如此反复,直到最后余数是0为止。如果是求两个数的最大公约数,那么最后的除数就是这两个数的最大公约数。
class Solution {
    public String gcdOfStrings(String str1, String str2) {
        // 假设str1是N个x,str2是M个x,那么str1+str2肯定是等于str2+str1的。
        if (!(str1 + str2).equals(str2 + str1)) {
            return "";
        }
        // 辗转相除法求gcd。  substring() 方法返回字符串的子字符串
        return str1.substring(0, gcd(str1.length(), str2.length()));
    }

    private int gcd(int a, int b) {
        return b == 0? a: gcd(b, a % b);
    }
}
class Solution {
    public String gcdOfStrings(String str1, String str2) {
        if (!(str1 + str2).equals(str2 + str1)) {
            return "";
        }
        return gcd(str1,str2);
    }

    //更相减损术
    public String gcd (String s1,String s2){
        if (s1.equals(s2)){
            return s1;
        }
        if (s1.length()>s2.length()){
            s1 = s1.substring(s2.length(), s1.length());
            return gcd(s1,s2);
        }else {
            s2 = s2.substring(s1.length(),s2.length());
            return gcd(s1,s2);
        }
    }
}

1281. 整数的各位积和之差

class Solution {
    public int subtractProductAndSum(int n) {
        int res1 = 1;
        int res2 = 0;
        while(n>0){
            res1 *= n%10;
            res2 += n%10;
            n = n/10;
        }
        return res1-res2;
    }
}

1295. 统计位数为偶数的数字

class Solution {
    public int findNumbers(int[] nums) {
        int count=0;
        for(int i=0;i<nums.length;++i){
            if((nums[i]>=10&&nums[i]<100)||(nums[i]>=1000&&nums[i]<10000))
                count++;
        }
        return count;        
    }
}
class Solution {
    public int findNumbers(int[] nums) {
        int res=0;
        for(int i:nums){
            if(String.valueOf(i).length()%2==0){
                res++;
            }
        }
        return res;
    }
}
class Solution {
    public int findNumbers(int[] nums) {
        int count = 0;
        for (int i = 0; i < nums.length; i++) {
            int N = nums[i];
            //记录除10的次数
            int countTen = 0;
            while (N != 0) {
                N/=10;
                countTen++;
            }
            //如果除10的次数是偶数次,则该数为偶数位数
            if (countTen % 2 == 0) {
                count++;
            }
        }
        return count;
    }
}

你知道的越多,你不知道的越多。
有道无术,术尚可求,有术无道,止于术。
如有其它问题,欢迎大家留言,我们一起讨论,一起学习,一起进步

发布了193 篇原创文章 · 获赞 116 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_40722827/article/details/104828671