Leetcode 1307 口算難題

2021-10-02 14:33:59 字數 1459 閱讀 8295

因為一共只有10種可能的數字[0-9],所以等式中包含的所有的字元最多包含10種,我們只需要列舉每一種字元對應到每一種數字,得到滿足條件的那乙個即可,但是要注意,首字元不能為0。

思路非常的簡單,但是也要注意,處理不當可能會超時。我們如果直接列舉每一種字元可能對應的數字,然後再根據等式計算結果,這樣非常可能超時。可以先進行預處理,求出給定的所有串**現的字元的出現的次數和出現的位置代表的數字的和,最終將這些和加上就能判斷正確結果。最後這一點不好描述,但是**非常清晰,可以檢視**

// 每一種字元出現的權重

int[

] weights =

newint[26

];// 哪些字元不能為0

boolean

notzero =

newboolean[26

];public

boolean

issolvable

(string[

] words, string result)

notzero[words[i]

.charat(0

)-'a']

=true;}

int p =1;

for(

int i = result.

length()

-1; i >=

0; i--

) notzero[result.

charat(0

)-'a']

=true

; list

list =

newarraylist

<

>()

;// 獲取到所有出現的字元

for(

int i =

0; i <

26; i++)}

integer[

] ints = list.

toarray

(new

integer[0

]);return

dfs(ints,

newboolean[10

],0,

0);}

public

boolean

dfs(integer[

] chars,

boolean

vis,

int index,

int sum)

for(

int i =

0; i <

10; i++

) vis[i]

=true;if

(dfs

(chars, vis, index +

1, sum + i * weights[chars[index]])

) vis[i]

=false;}

}return

false

;}

HD 6287 口算訓練

problem description 小q非常喜歡數學,但是他的口算能力非常弱。因此他找到了小t,給了小t乙個長度為 n 的正整數序列 a 1,a2 an,要求小t丟擲 m 個問題以訓練他的口算能力。每個問題給出三個正整數 l r,d 小q需要通過口算快速判斷 a l al 1 a r 1 ar是...

HDU 6287 口算訓練

小q非常喜歡數學,但是他的口算能力非常弱。因此他找到了小t,給了小t乙個長度為n的正整數序列a1,a2,an,要求小t丟擲m個問題以訓練他的口算能力。每個問題給出三個正整數l,r,d,小q需要通過口算快速判斷al al 1 ar 1 ar是不是d的倍數。小q迅速地回答了出來,但是小t並不知道正確答案...

HDU 6287 口算訓練

小q非常喜歡數學,但是他的口算能力非常弱。因此他找到了小t,給了小t乙個長度為n的正整數序列a1,a2,an,要求小t丟擲m個問題以訓練他的口算能力。每個問題給出三個正整數l,r,d小q需要通過口算快速判斷al al 1 ar 1 a r al al 1 ar 1 ar 是不是d的倍數。小q迅速地回...