zoukankan      html  css  js  c++  java
  • leetcode 191:统计1的个数;172. Factorial Trailing Zeroes;54,59 蛇形矩阵 I II

    
    

    class Solution {
    public:
        int hammingWeight(uint32_t n) {
            int k=0;   //统计次数
            while(n>0){
                n &= (n-1);   //每次消掉一个1
                k++;   //统计消掉1的次数
            }
            return k;  
        }
    };

     

    求 n! 中0的个数。

    思路:计算0的个数,也就是计算10的个数,即计算包含的2和5组成的pair的个数,因为5的个数比2少,所以2和5组成的pair的个数由5的个数决定。       

    观察15! = 有3个5(来自其中的5, 10, 15), 所以计算15/5=3就可以。       

    25! = 有6个5(有5个5来自其中的5, 10, 15, 20, 25, 另外还有1个5来自25=(5*5)的另外一个5),

    所以要循环计算n/5, 直到商为0。

    class Solution {
    public:
        int trailingZeroes(int n) {
            int result = 0, k = 0;
            while(n>0){
                k = n/5;   //统计 n! 是5的几幂次
                result += k;
                n = k;
            }
            return result;
        }
    };

    螺旋矩阵:

    class Solution {
    public:
        vector<int> spiralOrder(vector<vector<int>>& matrix) {
            if(matrix.empty() || matrix[0].empty()) return {};
            
            int m = matrix.size();  //行数
            int n = matrix[0].size();   //列数
            
            vector<int> res;
            int up = 0, down = m-1, left = 0, right = n-1;
            while(true){
                for(int j = left; j<=right;j++)
                    res.push_back(matrix[up][j]);
                
                if(++up > down) break;
                
                for(int j = up; j<=down; j++)
                    res.push_back(matrix[j][right]);
                
                if(--right < left) break;
                
                for(int j = right; j>= left; j--)
                    res.push_back(matrix[down][j]);
                
                if(--down < up) break;
                
                for(int j = down; j >= up; j--)
                    res.push_back(matrix[j][left]);
                
                if(++left>right) break;
            }
            return res;
        }
    };

    注意下需要设置一个val变量,它的取值是不断递增的。

    class Solution {
    public:
        vector<vector<int>> generateMatrix(int n) {
            int left = 0, right = n-1, top = 0, down = n-1, val = 1;
            vector<vector<int>> res(n, vector<int> (n,0));   //初始化res为n个vector<int>的对象,每个又包含n个0
            while(true){
                for(int j = left; j<=right; j++)
                    res[top][j] = val++;
                if(++top > down) break;
                
                for(int j = top; j<=down; j++)
                    res[j][right] = val++;
                if(--right < left) break;
                
                for(int j = right; j>=left; j--)
                    res[down][j] = val++;
                if(--down < top) break;
                
                for(int j = down; j>=top; j--)
                    res[j][left] = val++;
                if(++left > right) break;
                
            }
            return res;
        }
    };
  • 相关阅读:
    开发中的一些总结。。。
    Directory Listing Denied错误
    webservice的一些使用心得。。
    vs2005 sp1 补丁后,不能初始化
    谈C/C++指针精髓
    CString 的函数
    javaScript 中 call 函数的用法说明 & 继承
    条款12: 尽量使用初始化而不要在构造函数里赋值(effectiveC++)
    js日期时间函数(经典+完善+实用)
    学习之路一 记录学习中的手记
  • 原文地址:https://www.cnblogs.com/Bella2017/p/10618371.html
Copyright © 2011-2022 走看看