zoukankan      html  css  js  c++  java
  • LeetCode172 Factorial Trailing Zeroes. LeetCode258 Add Digits. LeetCode268 Missing Number

    数学题

    172. Factorial Trailing Zeroes

    Given an integer n, return the number of trailing zeroes in n!.

    Note: Your solution should be in logarithmic time complexity. (Easy)

     

    分析:求n的阶乘中末位0的个数,也就是求n!中因数5的个数(2比5多),简单思路是遍历一遍,对于每个数,以此除以5求其因数5的个数,但会超时。

    考虑到一个数n比他小能被5整除的数的个数是一定的(n / 5),由此再考虑能被25整除,125整除的数的个数,得到如下算法:

    代码:

     1 class Solution {
     2 public:
     3     int trailingZeroes(int n) {
     4         int sum = 0;
     5         while (n > 0) {
     6             sum += (n / 5);
     7             n /= 5;
     8         }
     9         return sum;
    10     }
    11 };

    258. Add Digits

    Given a non-negative integer num, repeatedly add all its digits until the result has only one digit.

    For example:

    Given num = 38, the process is like: 3 + 8 = 111 + 1 = 2. Since 2 has only one digit, return it. (Easy)

    Follow up:
    Could you do it without any loop/recursion in O(1) runtime?

    分析:

    考虑到

    ab % 9 = (9a + a + b) % 9 = (a + b) % 9;

    abc % 9 = (99a + 9 b + a + b + c) % 9 = (a + b + c) % 9;

    所以求到其只有个位数位置即用其mod 9即可,考虑到被9整除的数应该返回9而非0,采用先减一再加一方式处理。

    代码:

    1 class Solution {
    2 public:
    3     int addDigits(int num) {
    4         if (num == 0) {
    5             return 0;
    6         }
    7         return (num - 1) % 9 + 1;
    8     }
    9 };

    268. Missing Number

    Given an array containing n distinct numbers taken from 0, 1, 2, ..., n, find the one that is missing from the array.

    For example,
    Given nums = [0, 1, 3] return 2. (Medium)

    分析:

    采用先求和(前n项和),再将求和结果与数组和相减的方法,求得差哪个数

    代码:

     1 class Solution {
     2 public:
     3     int missingNumber(vector<int>& nums) {
     4         int n = nums.size();
     5         int sum1 = n * (n + 1) / 2;
     6         int sum2 = 0;
     7         for (int i = 0; i < nums.size(); ++i) {
     8             sum2 += nums[i];
     9         }
    10         return sum1 - sum2;
    11     }
    12 };
     
  • 相关阅读:
    webpack前端构建工具学习总结(一)之webpack安装、创建项目
    NPM、nodeJS安装,grunt自动化构建工具学习总结
    javascript获取childNodes详情,删除空节点
    苹果手机微信上form表单提交的问题
    苹果safari浏览器window.open问题
    微信公众号右上角菜单
    js实现阶乘
    my97DatePicker日期控件——日期输入框联动,使用focus使第二个输入框没展示出日期控件
    事件绑定和普通事件的区别
    Java单例模式的例子
  • 原文地址:https://www.cnblogs.com/wangxiaobao/p/6172121.html
Copyright © 2011-2022 走看看