Leetcode 172) Factorial Trailing Zeros

image

  • Wrong : 25, 75같은 수는 5로 여러번 나눠떨어지는데, 그냥 5를 한번만 count 해서..
class Solution {
    public int trailingZeroes(int n) {
        int a=n;
        int five=0;
        while (a>0){
            if(a%5==0){
                five++;
            }
            a--;
        }
        return five;
    }
}
  • Right, but not that good performance.
class Solution {
    public int trailingZeroes(int n) {
        int a=n;
        int five=0;
        while (a>0){
            int fiveDetector=a;
            while(fiveDetector%5==0){
                five++;
                fiveDetector = fiveDetector/5;
            }
            a--;
        }
        return five;
    }
}
  • 아 이렇게 하면 더 간단하게 되는구나
  • 102 까지 수 중, 5로 나누어 떨어지는 수가 20개가 있다. –> 2번이랑 겹치지 않나..?아!! 2번이랑 겹쳐도 되는구나!!! 왜냐면 2번에서 두번카운트 되는 대신, 여기서 한번 카운트, 2번에서 한번 카운트 총 두번 이렇게 들어가니까!!
  • 102 까지 수 중, 25로 나누어 떨어지는 수가 4개 있다.
  • 102까지 수 중, 125로 나누어 떨어지는 수가 0개 있다.

이런식으로!

class Solution {
    public int trailingZeroes(int n) {
        int grad = 5;
        int ans = 0;
        while (n >= grad){
            ans += n / grad;
            grad *= 5;
        }
        return ans;
    }
}

© 2018. All rights reserved.

Powered by Hydejack v8.5.2