一些演算法題的記錄
1. 統計數字
計算數字k在0到n中的出現的次數,k可能是0~9的一個值
樣例
例如n=12,k=1,在 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],我們發現1出現了5次 (1, 10, 11, 12)
《通過測試100%》
class Solution {
public:
int digitCounts(int k, int n) {
// write your code here
int i = 0;
while (n >= 0)
{
int j = n;
while (j != 0)
{
if (j % 10 == k)
i++;
j = j / 10;
}
n--;
}
if(k==0)
i++;
return i;
}
};
2. 尾部的零
設計一個演算法,計算出n階乘中尾部零的個數
樣例
11! = 39916800,因此應該返回 2
挑戰
O(logN)的時間複雜度
《通過測試40%》
class Solution {
public:
long long trailingZeros(long long n) {
// write your code here, try to do it without arithmetic operators.
long long i = 0;
long long sum = 1;
while (n > 0)
{
long long j = n;
if (j % 10 == 0 || j % 5 == 0 || j % 2 == 0);
else
j = 1;
sum = sum * j;
if (sum % 10 == 0 || sum % 5 == 0)
{
while (sum % 10 == 0)
{
i++;
sum = sum / 10;
}
if (sum % 5 != 0)
sum = 1;
}
else
{
sum = 1;
}
n--;
}
return i;
}
};