1. 程式人生 > >一些演算法題的記錄

一些演算法題的記錄

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;
  }
};