LeetCode:Confusing Number II

博客提及LeetCode中的暴力搜索,暴力搜索是信息技术领域常用的算法手段,在解决各类问题时发挥作用。

暴力搜索:

#include<bits/stdc++.h>

using namespace std;

void printVec1(vector<int>& v);
void printVec2(vector<vector<int>>& v);

class Solution {
bool doit(long long num,int T,long long n){
    if(num > n) return false;
    int t = 0;
    long long s = num;
    while(s>0){
        t++;
        s/=10;
    }
    if(t!=T) return false;
    s = num;
    long long r = 0;
    while(s>0){
        r*=10;
        int d = s%10;
        if(d==6) r+=9;
        else if(d==9) r+=6;
        else r+=d;
        s/=10;
    }
    if(num==r) return false;
    return true;
};
void dfs(int t,int T,long long num,int& ans,long long n){
    if(t > 0){
        if(doit(num,t,n)) ans++;
    }
    if(t == T) return ;
    int bits[] = {0,1,6,8,9};
    for(int i=0;i<5;i++){
        num*=10;
        num+=bits[i];
        dfs(t+1,T,num,ans,n);
        num/=10;
    }
};
public:
    int confusingNumberII(int N) {
        int ans = 0;
        long long num = 0;
        int n = N;
        int t = 0;
        while(n>0){
            n/=10;
            t++;
        }
        dfs(0,t,num,ans,N);
        return ans;
    }
};

int main(){
    Solution myS;
    int ans = myS.confusingNumberII(195);
    cout<<ans<<endl;
    return 0;
}

// 输出一维数组
void printVec1(vector<int>& v){
    printf("{");
    if(v.size()!=0) printf("%d",v[0]);
    for(int i=1;i<v.size();i++){
        printf(",%d",v[i]);
    }
    printf("}");
}

// 输出二维数组
void printVec2(vector<vector<int>>& v){
    printf("{");
    if(v.size()!=0) printVec1(v[0]);
    for(int i=1;i<v.size();i++){
        printf(",");
        printVec1(v[i]);
    }
    printf("}");
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值