1.問題描述
找出所有數字長度為n,旋轉180度後依舊是相同的數字的解題思路
2.解題思想
遞迴呼叫:
用遞迴的情形:你在解決問題的時候,發現要用巢狀迴圈,迴圈裡面要做的事是一樣的,但是迴圈的次數是隨問題規模而變化的,可是你知道迴圈結束的條件,這個時候就可以使用遞迴;
遞迴解題必備思想:
a.遞迴結束的條件可以假設為已知的條件,由此逆推來解決回溯的時候需要解決的子問題(白話文就是:最後一層呼叫結束啦,會返回乙個什麼結果,這個結果我上一級該怎麼操作,可以有效幫你決定遞迴的時候你要寫的返回引數和函式體。)
3.題目分析
第一步:確定旋轉180度依舊是數字的數字單元:
0->0, 1->1, 6->9, 8->8, 9->9
第二步:舉例逐步考慮,找出規律(函式就是解決一類問題的規律)
n=
1:輸出[
"0",
"1",
"8"];n=
2:輸出[
"11"
,"69"
,"88"
,"96"];
n=3:輸出"101"
"111"
"181"
|"609"
"619"
"689"
|"808"
"818"
"888"
|"906"
"916"
"986"
你會發現規律,當n>2之後,每乙個可以倒序數是按照中間軸以(0,0),(1,1),(6,9),(8,8),(9,6)進行疊加。
例如當n=3的時候,中間軸只能為0,1,8,對於0,兩邊加上上面說的五個匹配陣列,當然0不能作為開頭;
而當n為4的時候中間軸是"",兩邊不斷地同時加上上面的五個匹配組直到資料長度為n;
第三步:規律**化
視角1:從中間軸開始,當n為基數的時候,中間軸上的資料只能是0,1,8,這三個資料存入陣列中(使用c++的小夥伴推薦用vector或者list動態陣列來寫),返回給上一級,上一級將這三個數依次取出,每次都會往中間軸兩邊加上「0」+s+「0」…,生成的新資料會進入陣列中,最後再返回給上一級,直到返回最頂層,這個時候要考慮開頭不能為0的情況,總的來說**如下:
vector
reducenum
(int n,
int len)
if(n==1)
//假設已經知道了最底層的結果,然後考慮後面的**要怎麼寫
vec =
reducenum
(n -
2,len)
; vectorres;
for(
auto x:vec)
return res;
}vector
findstrobogrammatic
(int n)
視角二:
如果我不是先確定中間軸怎麼辦,我是先分析兩邊,然後逐漸向中間軸靠攏,直到最後確定中間軸的結果,那麼這個時候,就相當於你在確定中間軸的時候就把這個數給確定下來了,那麼就可以直接將這個資料寫進最終的結果,然後回溯到上一級,上一級再次到底層來確定最終資料,那麼這樣在空間複雜度上高出不少,最終**如下:
bool
dfs(string s,
int left, vector>dict, vectordict1,
int n, vector
&vec)
if(n%2==
1&&left==n/2-
1)return0;
}for
(int i =
0; i <
5; i++
)return1;
}vector
findstrobogrammatic
(int n)
vector>dict =,,
,,};
vectordict1 =
;int left =0;
for(
int i =
1; i <
5; i++
)return vec;
}
有誤之處,還請大家指出。 呼叫中心資料
概念 呼叫中心是利用現代通訊手段集中處理與客戶關係的互動過程的機構。組成 交換機 pbx 排隊機 acd 計算機 整合 cti 互動式語音應答 ivr 來話呼叫管理 去話呼叫管 理業務計費系統 監控系統管理 統計系統 客戶關係管理 crm 系統幫助臺 多種應用伺服器 web伺服器 e mail 伺服...
leetcode 724 尋找陣列的中心陣列
給定乙個整數型別的陣列 nums,請編寫乙個能夠返回陣列 中心索引 的方法。我們是這樣定義陣列中心索引的 陣列中心索引的左側所有元素相加的和等於右側所有元素相加的和。如果陣列不存在中心索引,那麼我們應該返回 1。如果陣列有多個中心索引,那麼我們應該返回最靠近左邊的那乙個。示例 1 輸入 nums 1...
支付中心資料庫查詢語句 個人記錄
select id id號 sn 訂單號 select paycenterdb.pay order.order id from paycenterdb.pay order where paycenterdb.pay order.out trade no saledb.pay order.sn 支付中...