易懂遞迴回溯解決電話號碼組合(以及非回溯演算法解決)

2021-10-01 11:07:55 字數 2455 閱讀 7966

題目描述

給定乙個僅包含數字 2-9 的字串,返回所有它能表示的字母組合。

給出數字到字母的對映如下(與**按鍵相同)。注意 1 不對應任何字母。

示例:輸入:「23」

輸出:[「ad」, 「ae」, 「af」, 「bd」, 「be」, 「bf」, 「cd」, 「ce」, 「cf」].

遞迴**

執行用時 :

0 ms

, 在所有 c 提交中擊敗了

100.00%

的使用者記憶體消耗 :

7.1 mb

, 在所有 c 提交中擊敗了

41.67%

的使用者

/**

* note: the returned array must be malloced, assume caller calls free().

*///套路,套用框架

void

backtrack

(char

** return_list ,

char

* digits ,

int i,

int digits_size,

char

*model,

int* ji)}if

(digits[i]

=='7'

)//由於7,9,8按鍵中字母不同所以分別處理}if

(digits[i]

=='8')}

if(digits[i]

=='9')}

}else

}char**

lettercombinations

(char

* digits,

int* returnsize)

for(

int i =

0; i <

strlen

(digits)

; i++

)//這一步是為了提前計算目標二維陣列的元素多少

char

**res =

(char**

)malloc

(k*sizeof

(char*)

);char

*result =

(char*)

calloc

(strlen

(digits)+1

,sizeof

(char))

;backtrack

(res,digits,0,

strlen

(digits)

,result,returnsize)

;return res;

}

非遞迴非回溯**
char**

lettercombinations

(char

* digits,

int* returnsize)

;int map_long[8]

=;int digits_len =

strlen

(digits)

;int i =

0, j =

0, k =

0, l =0;

int num_char =0;

int cur_level =1;

while

(i < digits_len)

cur_level *

= map_long[digits[i++]-

'2']

;

num_char =

*returnsize = cur_level;

i =0;

char_ret =

(char**

)malloc

(sizeof

(char**

)* num_char)

;while

(i < cur_level)

i =0;

//將輸入的數字對應的字母按排輸入

//遍歷每個輸入的字母

回溯 leetcode 電話號碼的字母組合

給定乙個僅包含數字 2 9 的字串,返回所有它能表示的字母組合。答案可以按 任意順序 返回。給出數字到字母的對映如下 與 按鍵相同 注意 1 不對應任何字母。輸入 digits 23 輸出 ad ae af bd be bf cd ce cf 17.號碼的字母組合 定義乙個path記錄每次迴圈放入的...

17 電話號碼的組合

我怎麼也沒想到,他還能打一樣的。當事人考慮到了2,寫的錯誤 主要思想還是填坑 int flag num 200 int flag char 200 vector lettercombinations string digits void dfs string digits,vector ans,in...

C 電話號碼的組合

給定乙個僅包含數字 2 9 的字串,返回所有它能表示的字母組合。給出數字到字母的對映如下 與 按鍵相同 注意 1 不對應任何字母。例如 輸入 23 輸出 ad ae af bd be bf cd ce cf static string str class solution 找到當前字元在string...