天天看点

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

给一个由 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[]={};
void f(int curr,char a[])//n表示已经有的数的个数 
{
    if(curr==strlength)//这种情况下,找到了缺失的数 
    {
        cout<<"find!!!!"<<endl;
        for(int i=;i<=num;i++)
        {
            cout<<flag[i]<<" ";
            if(flag[i]==)
            {
                cout<<"缺少的数字是:"<<i<<endl;//注意这个地方的找到缺少的数字之后还会退出这个函数继续寻找,但是其余的情况都不会再来到这个位置了 
            }
        } 
        return;
    }
    int currnum=a[curr]-;

    if(currnum<=num&&flag[currnum]==)
    {
        cout<<"current:"<<currnum<<endl;
        flag[currnum]=;
        f(curr+,a);
        cout<<"current:"<<currnum<<endl;
        flag[currnum]=;
    }
    currnum=currnum*+a[curr+]-;
    if(currnum<=num&&flag[currnum]==)
    {
        cout<<"current:"<<currnum<<endl;
        flag[currnum]=;
        f(curr+,a);
        flag[currnum]=;
    }
}
int main()
{
    char aa[];
    cin>>num;
    cin>>aa;
    strlength=strlen(aa);
    f(,aa);
} 
           

继续阅读