讨论/题目交流/🐱 力扣第 10 场夜喵双周赛/
🐱 力扣第 10 场夜喵双周赛

欢迎在这里交流分享你的参赛心得以及体验。【前往竞赛
image.png

展开讨论

本菜鸡第一次AK,心酸。看大家都在说第三题,第三题第一反应是全排列的改版,再看,没错就是。

vector<int > num;
vector<int > ans;
int Abs(int a,int b){
    if(a>b)
        return a-b==1?1:0;
    else return b-a==1?1:0; 
}
void Generate(int val,int S,int low,int high){
    if(val==S+1){
        int cnt=0;
        long long sums=0;
        while(cnt<S){
            sums=sums*10+num[cnt++];
        }
        
        if(sums>=low&&sums<=high) {
            //cout<<"sums:"<<sums<<endl;
            ans.push_back(sums);
        }
        
    }
    else {
        for(int i=0;i<=9;i++){
            if(val==1&&i==0)
                continue;
            if(val==1)
            {
              //  cout<<i<<" ";
                num.push_back(i);
                Generate(val+1,S,low,high);
                num.pop_back();
            }
            else {
                if(Abs(i,num[num.size()-1])==1)
                {
                   // cout<<i<<" ";
                    num.push_back(i);
                    Generate(val+1,S,low,high);
                    num.pop_back();
                }
            }
        }
    }
}
class Solution {
public:
    vector<int> countSteppingNumbers(int low, int high) {
        ans.clear();
        num.clear();
        int l1=0,l2=0;
        int a=low,b=high;
        while(a){
            l1++;
            a/=10;
        }
        while(b){
            l2++;
            b/=10;
        }
        for(int i=l1;i<=l2;i++){
            num.clear();
            Generate(1,i,low,high);
        }
        sort(ans.begin(),ans.end());
        return ans;
    }
};
1
展开全部 8 讨论