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;
}
}
你知道的越多,你不知道的越多。
有道无术,术尚可求,有术无道,止于术。
如有其它问题,欢迎大家留言,我们一起讨论,一起学习,一起进步