zoukankan      html  css  js  c++  java
  • leetcode 443: String Compression,357: Count Numbers with Unique Digits

    class Solution {
    public:
        int compress(vector<char>& chars) {
            int cur=0; //记录新数组中元素的位置
            for(int i=0, j=0; i<chars.size(); i=j){
                while(j<chars.size() && chars[i]==chars[j])
                    j++;
                chars[cur++] = chars[i];
                //当chars中某个元素只有一个时,退出while循环
                if(j-i == 1)
                    continue;
                    
                for(char c : to_string(j-i))
                    chars[cur++] = c;
                
            }
            return cur;
        }
    };

    题意:输入一个非负整数n,寻找[ 0, 10^n) 中 各位上都不相同的数字的总个数。 

    思路:找规律,发现当前状态(假如是n位数)依赖于前一状态(n-1位)的值再加上f(n)=9*9*8*...*(11-n) (累加个数为n个)。

    也就是当第首位为0时,计算剩余位各不相同的个数;和当首位不为0时,有9种可能,第二位(从左数)可以为0,不能和首位相同,有9种可能,第三位可以为0,不能和前两位相同,有8种可能,以此类推。。。

    class Solution {
    public:
        int countNumbersWithUniqueDigits(int n) {
            if(n==0) return 1;
            int res=10;
            int cnt = 9;
            for(int i=2; i<=n; i++){
                cnt *= (11-i);
                res+=cnt;
            }
            
            return res;
        }
    };
  • 相关阅读:
    vue中的ref,refs使用
    setTimeout 为0的作用
    click 和 mousedown 以及map地图的pointerdown
    electron图标
    websocket
    居中
    一键生成vue模板
    IntelliJ IDEA 安装破解及汉化详解
    基础的一些东西
    git 合作开发
  • 原文地址:https://www.cnblogs.com/Bella2017/p/11109584.html
Copyright © 2011-2022 走看看