日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

Leetcode5635. 构建字典序最大的可行序列[C++题解]:dfs暴搜

發布時間:2025/4/5 c/c++ 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Leetcode5635. 构建字典序最大的可行序列[C++题解]:dfs暴搜 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 題目
    • 題目鏈接

題目

題目重述:給定一個數n,求一個長度為2n-1的序列:1只出現一次,2~n之間每個數出現2次,并且 對于2 ~n之間的每個數i,兩個i之間相差為i,比如n=3,[3,1,2,3,2] ,兩個3之間距離為3,兩個2距離為2. 換言之,知道 第一個數i的下標x,第二個下標就確定了x+i。 要求滿足條件的字典序最大的序列。

數據范圍n≤20.

思路:想到暴搜
ac代碼

class Solution { public:int n;vector<bool>st; //1~n這些數是否用過vector<int> path; //最終結果數組//對于下標u,我能放什么bool dfs(int u){//退出條件if(u==2*n-1) return true;if(path[u]) return dfs(u+1);//字典序最大,需要倒序遍歷n~2,看看是否可以放在path[u] 和path[u+i]for(int i=n;i>1;i--){if(!st[i] && u+i <2*n-1&& !path[u+i]){path[u]=path[u+i]=i;// 放上ist[i]=true;//用過了if(dfs(u+1)) return true;//如果有解,返回true//恢復現場st[i]=false;path[u]=path[u+i]=0; }}//特判1這個數if(!st[1]){st[1]=true;path[u]=1;if(dfs(u+1)) return true; //如果有解,返回true//恢復現場path[u]=0; st[1]=false;}return false;}vector<int> constructDistancedSequence(int _n) {n=_n;st.resize(n+1,false); //都沒訪問過path.resize(2*n-1);dfs(0);return path;} };

題目鏈接

Leetcode5635. 構建字典序最大的可行序列

總結

以上是生活随笔為你收集整理的Leetcode5635. 构建字典序最大的可行序列[C++题解]:dfs暴搜的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。