深度优先搜索---寻找数字字符串中缺失的数字

给一个由 1 - n 的整数随机组成的一个字符串序列,其中丢失了一个整数,请找到它。
注意事项

n <= 30
样例

给出 n = 20, str = 19201234567891011121314151618

丢失的数是 17 ,返回这个数。

//深度优先搜索算法
//给一个由1-n的整数随机组成的一个字符串序列,其中丢失一个整数,请找到它 注意这里n<=30 
//例如 n=20,str="1918171615141312111098764321"丢失的数是5
//注意,如果在数组而不是字符串中找 未出现的数,可以直接求和,然后在做差,但是这种方法比较耗时;另一种方法可以
//将该数组中的所有的数字和所有数字异或,得到的结果就是缺失的那个数 
#include<iostream>
#include<string.h>
using namespace std;
int num;//即为题目中的范围 
int strlength;//字符串的长度 
int flag[31]={0};
void f(int curr,char a[])//n表示已经有的数的个数 
{
    if(curr==strlength)//这种情况下,找到了缺失的数 
    {
        cout<<"find!!!!"<<endl;
        for(int i=1;i<=num;i++)
        {
            cout<<flag[i]<<" ";
            if(flag[i]==0)
            {
                cout<<"缺少的数字是:"<<i<<endl;//注意这个地方的找到缺少的数字之后还会退出这个函数继续寻找,但是其余的情况都不会再来到这个位置了 
            }
        } 
        return;
    }
    int currnum=a[curr]-48;

    if(currnum<=num&&flag[currnum]==0)
    {
        cout<<"current:"<<currnum<<endl;
        flag[currnum]=1;
        f(curr+1,a);
        cout<<"current:"<<currnum<<endl;
        flag[currnum]=0;
    }
    currnum=currnum*10+a[curr+1]-48;
    if(currnum<=num&&flag[currnum]==0)
    {
        cout<<"current:"<<currnum<<endl;
        flag[currnum]=1;
        f(curr+2,a);
        flag[currnum]=0;
    }
}
int main()
{
    char aa[30];
    cin>>num;
    cin>>aa;
    strlength=strlen(aa);
    f(0,aa);
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值