प्रौद्योगिकी साझेदारी

लिकोउ-पश्चातापविधिः

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

पश्चात्तापः किम् ?

कस्यचित् नोडस्य अन्वेषणकाले यदि वयं पश्यामः यत् वर्तमानः नोड् (तस्य उपनोड् च) आवश्यकं लक्ष्यं नास्ति तर्हि वयं अन्वेषणं निरन्तरं कर्तुं मूलनोड् प्रति पुनः पतामः, वर्तमाननोड् इत्यस्य परिवर्तितां स्थितिं च पुनः स्थापयामः
द्वे लघुयुक्तौ स्मर्यताम् : १.प्रथमं सन्दर्भेण (&) स्थितिं पारयितुं, द्वितीयं च पुनरावृत्तिसमाप्तेः अनन्तरं सर्वाणि स्थितिसंशोधनं परिवर्तयितुं ।
सामान्यतया पश्चात्तापस्य परिवर्तनस्य कृते द्वौ परिस्थितौ भवतः, यथा क्रमपरिवर्तनं संयोजनं च ।
स्मर्यतां यथा, मैट्रिक्समध्ये स्ट्रिंग् अन्वेष्टुं ।

46.पूर्ण व्यवस्था

विषय

द्वितीयकसङ्ख्यां विना सरणी दत्ताnums, return itsसर्वे सम्भाव्य क्रमपरिवर्तनानि .भवान्‌ शक्नोतियथाक्रमम्उत्तरं प्रत्यागच्छतु।

उदाहरणम् १ : १.

输入:nums = [1,2,3]
输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]

उदाहरणम् २ : १.

输入:nums = [0,1]
输出:[[0,1],[1,0]]

उदाहरणम् ३ : १.

输入:nums = [1]
输出:[[1]]

संकेत:

  • 1 <= nums.length <= 6
  • -10 <= nums[i] <= 10
  • numsसर्वे पूर्णाङ्काः inपरस्परं भिन्नम्​​​​​​​
उत्तरम्‌
एरे इत्यस्य सर्वाणि क्रमबद्धानि संयोजनानि आउटपुट् कर्तुं वयं backtracking मेथड् इत्यस्य उपयोगं कर्तुं शक्नुमः ।
प्रथमं स्थानं निर्धारयन्तु, ततः परं प्रत्येकं स्थानेन सह तस्य आदानप्रदानं कुर्वन्तु । परिवर्तनं कृत्वा अग्रिमस्थानं गच्छन्तु । ततः एषा पदमाला समाप्तस्य अनन्तरं भवद्भिः प्रतिस्थापितानि प्रतिस्थापयितुं आवश्यकम् । स पश्चात्तापविधिः ।
  1. class Solution {
  2. public:
  3. vector<vector<int>> permute(vector<int>& nums) {
  4. vector<vector<int>> ans;
  5. back(nums,0,ans);
  6. return ans;
  7. }
  8. void back(vector<int>& nums,int n,vector<vector<int>>& ans){
  9. int i;
  10. if(n==nums.size()-1)
  11. ans.push_back(nums);
  12. for(i=n;i<nums.size();i++){
  13. swap(nums[i],nums[n]);
  14. back(nums,n+1,ans);
  15. swap(nums[i],nums[n]);
  16. }
  17. }
  18. };

77. संयोगः

77. संयोगः

विषय

पूर्णाङ्कद्वयं दत्तम्nतथाk, return range[1, n]सर्वे सम्भवन्ति inkसंख्यासंयोगः ।

भवन्तः दबावितुं शक्नुवन्तिकोऽपि आदेशःउत्तरं प्रत्यागच्छतु।

उदाहरणम् १ : १.

输入:n = 4, k = 2
输出:
[
  [2,4],
  [3,4],
  [2,3],
  [1,2],
  [1,3],
  [1,4],
]

उदाहरणम् २ : १.

输入:n = 1, k = 1
输出:[[1]]

संकेत:

  • 1 <= n <= 20
  • 1 <= k <= n

题解

एकं गणनां सेट् कृत्वा प्रत्येकस्य संख्यां गणयन्तु यदा count==k, तत् सरणीयां स्थापयन्तु । एतत् पूर्वेभ्यः भिन्नम्, ये क्रमपरिवर्तनानि, संयोजनानि च आसन् । इदं किञ्चित् सरणीं चयनं इव अस्ति ।

1-n तः आरभ्य प्रत्येकस्य समयस्य परिणामान् संग्रहीतुं अतिरिक्तं सरणीं स्थापयन्तु । गणना गतिशीलरूपेण परिवर्तते । गणना-- पश्चात्तापस्य अनन्तरम्।

  1. class Solution {
  2. public:
  3. vector<vector<int>> combine(int n, int k) {
  4. vector<vector<int>> ans;
  5. vector<int> c(k,0);
  6. int count;
  7. dfs(n,k,1,ans,c,count);
  8. return ans;
  9. }
  10. void dfs(int n,int k,int level,vector<vector<int>>& ans,vector<int>& c,int& count){
  11. int i;
  12. if(count==k){
  13. ans.push_back(c);
  14. return ;
  15. }
  16. for(i=level;i<=n;i++){
  17. c[count++]=i;
  18. dfs(n,k,i+1,ans,c,count);
  19. --count;
  20. }
  21. }
  22. };

79. इकाई अन्वेषणम्

79. शब्दान्वेषणम्

विषय

दत्तः कm x n2D वर्णजालम्boardतारशब्दश्चword .यदिwordजालपुटे विद्यते, प्रत्यागच्छतिtrue;false 。

शब्दानां निर्माणं वर्णमालाक्रमेण समीपस्थेषु कोष्ठकेषु अक्षराणां कृते भवितुमर्हति, यत्र "समीपस्थाः" कोष्ठकाः ते सन्ति ये क्षैतिजरूपेण लम्बरूपेण वा समीपस्थाः सन्ति । एकस्मिन् कोष्ठके अक्षराणां पुनः पुनः प्रयोगः न भवति ।

उदाहरणम् १ : १.

输入:board = [["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]], word = "ABCCED"
输出:true

उदाहरणम् २ : १.

输入:board = [["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]], word = "SEE"
输出:true

उदाहरणम् ३ : १.

输入:board = [["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]], word = "ABCB"
输出:false

संकेत:

  • m == board.length
  • n = board[i].length
  • 1 <= m, n <= 6
  • 1 <= word.length <= 15
  • boardतथाwordकेवलं बृहत्-लघु-आङ्ग्ल-अक्षरैः निर्मितम्

उत्तरम्‌

तथैव दिनचर्या।

dfs + backtracking विधिः प्रथमं भ्रमणं परिभाषयति यत् प्रत्येकस्मिन् अन्वेषणकाले स्थानं चिह्नितं वा इति चिह्नितुं शक्यते यत् एकमेव स्थानं बहुवारं भ्रमणं न भवति

स्थानस्य कृते सीमां लङ्घयति वा इति निर्धारयितुं सीमानिर्णयः करणीयः । ततः तत् गतं वा, सफलतया प्राप्तं वा, स्थाने स्थितं अक्षरं लक्ष्यपत्रात् भिन्नं वा इति निर्धारयन्तु ।

dfs, परितः अन्वेष्टुम्।

  1. class Solution {
  2. public:
  3. bool exist(vector<vector<char>>& board, string word) {
  4. if(board.empty())
  5. return false;
  6. int m=board.size(),n=board[0].size();
  7. vector<vector<bool>> visit(m,vector<bool>(n,false));
  8. int i,j;
  9. bool find=false;
  10. for(i=0;i<m;i++){
  11. for(j=0;j<n;j++)
  12. back(i,j,board,word,find,visit,0);
  13. }
  14. return find;
  15. }
  16. void back(int i,int j,vector<vector<char>>& board,string& word,
  17. bool& find,vector<vector<bool>>& visit,int level){
  18. if(i<0||i>=board.size()||j<0||j>=board[0].size())
  19. return ;
  20. if(visit[i][j]||find||board[i][j]!=word[level])
  21. return ;
  22. if(level==word.size()-1){
  23. find=true;
  24. return ;
  25. }
  26. visit[i][j]=true;
  27. back(i+1,j,board,word,find,visit,level+1);
  28. back(i-1,j,board,word,find,visit,level+1);
  29. back(i,j+1,board,word,find,visit,level+1);
  30. back(i,j-1,board,word,find,visit,level+1);
  31. visit[i][j]=false;
  32. }
  33. };

51.N राज्ञी

51. राज्ञी एन

विषय

शतरंजस्य नियमानुसारं राज्ञी एकस्मिन् पङ्क्तौ वा स्तम्भे वा एकस्मिन् तिर्यक् वा खण्डे आक्रमणं कर्तुं शक्नोति ।

n राज्ञी समस्यायत् अधीयते तत् कथं करणीयम् इतिnराज्ञी स्थापिताn×nशतरंजफलके, राज्ञीः परस्परं आक्रमणं कर्तुं असमर्थाः च कुर्वन्तु।

पूर्णाङ्कं ददातुn, सर्वाणि भिन्नानि प्रत्यागच्छति राज्ञी समस्याs समाधानम् ।

प्रत्येकं समाधानं भिन्नं भवतिn राज्ञी समस्याशतरंजस्य खण्डस्य स्थापनयोजना, अस्मिन् योजनायां'Q'तथा'.'ते क्रमशः राज्ञ्याः शून्यपीठस्य च प्रतिनिधित्वं कुर्वन्ति।

उदाहरणम् १ : १.

输入:n = 4
输出:[[".Q..","...Q","Q...","..Q."],["..Q.","Q...","...Q",".Q.."]]
解释:如上图所示,4 皇后问题存在两个不同的解法。

उदाहरणम् २ : १.

输入:n = 1
输出:[["Q"]]

संकेत:

  • 1 <= n <= 9

题意

N Queen इत्यस्य कृते त्रीणि लेबलिंग् कार्याणि आवश्यकानि सन्ति, एकं स्तम्भः, एकः मुख्यः तिर्यक्, अपरः च गौणः तिर्यक् ।

यतो हि प्रत्येकस्मिन् पङ्क्तौ राज्ञी अवश्यमेव स्थापिता भविष्यति, तदा पङ्क्तिः पङ्क्तिः पारिता भवति यदा अन्तिमपङ्क्तिः सफलतया पारिता भवति, राज्ञी च सफलतया स्थापिता भवति तदा एव पर्याप्तम् । अतः पंक्तिचिह्नकार्यं सेट् कर्तुं आवश्यकता नास्ति ।

अस्मिन् समये वयं प्रथमपङ्क्तौ आरभ्य स्तम्भैः भ्रमितुं शक्नुमः । स्तम्भः मिथ्या वा, मुख्यतिर्यक् मिथ्या वा, गौणतिर्यक् मिथ्या वा इति निर्धारयतु । यदि एवम् अस्ति तर्हि अग्रिमस्तम्भे गच्छन्तु यदि न तर्हि स्थानं Q इति सेट् कुर्वन्तु, ततः अग्रिमपङ्क्तौ समानं अन्वेषणं कुर्वन्तु । Backtracking method, अन्वेषणानन्तरं स्थितिं चिह्नकार्यं च पुनः स्थापयितुं स्मर्यताम् ।

अयं तिर्यक् उपतिर्यक् च । निर्देशाङ्केषु आकर्षितुं शक्यते, एकः y=x+b, अन्यः y=-x+b ।

अतः b=yx, b&gt;0 कर्तुं, अतः वयं n योजयामः। अन्यः य+x इति ।

  1. class Solution {
  2. public:
  3. vector<vector<string>> solveNQueens(int n) {
  4. vector<vector<string>> ans;
  5. if(n==0)
  6. return {};
  7. vector<string> board(n,string(n,'.'));
  8. vector<bool> c(n,false),l(2*n-1,false),r(2*n-1,false);
  9. back(n,ans,board,c,l,r,0);
  10. return ans;
  11. }
  12. void back(int n,vector<vector<string>>& ans,vector<string>& board,vector<bool>& c,
  13. vector<bool>& l,vector<bool>& r,int row){
  14. if(row==n){
  15. ans.push_back(board);
  16. return ;
  17. }
  18. int i;
  19. for(i=0;i<n;i++){
  20. if(c[i]||l[row-i+n]||r[row+i]){
  21. continue;
  22. }
  23. board[row][i]='Q';
  24. c[i]=l[row-i+n]=r[row+i]=true;
  25. back(n,ans,board,c,l,r,row+1);
  26. board[row][i]='.';
  27. c[i]=l[row-i+n]=r[row+i]=false;
  28. }
  29. }
  30. };

सारांशं कुरुत

backtracking method कृते प्रथमं boundary conditions, ending conditions च अन्वेष्टुम् । सामान्यतया i समुच्चयः पङ्क्तिसङ्ख्यायाः तुल्यः भवति ।

सीमास्थितिः सामान्यतया सीमां न लङ्घयितुं भवति।

सामान्यतया चिह्नकार्यं सेट् कर्तव्यम् । ततः रेखां रेखां वा स्थानं स्थानं वा अभिगन्तुं, तथा च विगतं टैग् फंक्शन् true इति सेट् भवति । ततः परं वा अग्रिमपङ्क्तौ वा (प्रायः पुनरावर्तनीयरूपेण) गच्छन्तु । ततः परिष्करणानन्तरं उपर्युक्तं चिह्नकार्यं बोर्डं च पुनः स्थापयन्तु (प्रायः उत्तररूपेण एकं सेट् भविष्यति) । यदि मेलनं करोति तर्हि ans सरणीं प्रति push_back ।