3 回答

TA貢獻(xiàn)1891條經(jīng)驗(yàn) 獲得超3個贊
如果這些詞的有效性沒有得到任何考慮,那么最好放棄“字謎”這個詞。你只是在問排列。有一個用于解釋重復(fù)項(xiàng)的排列公式:
對于一個長度的單詞,取排列的基數(shù),即 。然后,對于單詞中的每個唯一字母,計(jì)算該字母的出現(xiàn)次數(shù)。對于這些字母中的每一個,取出現(xiàn)次數(shù)的階乘,并將排列數(shù)除以它。nn!
對于“地獄”:
n = 6
h = 1, e = 1, l = 3, o = 1
Permutations = 6! / (1! x 1! x 3! x 1!)
= 720 / 6
= 120

TA貢獻(xiàn)1824條經(jīng)驗(yàn) 獲得超6個贊
法典:
package main
import (
"bufio"
"fmt"
"os"
"strings"
)
func main() {
scanner := bufio.NewScanner(os.Stdin)
fmt.Print("Enter word: ")
scanner.Scan()
word := scanner.Text()
anagrams := factorial(len(word))
chars := strings.Split(word, "")
word1 := word
n := 0
for i := 0; i < len(word); i++ {
n = strings.Count(word1, chars[i])
if n > 0 {
anagrams = anagrams / factorial(n)
word1 = strings.Replace(word1, chars[i], "", -1)
}
}
fmt.Println(anagrams)
}
func factorial(n int) int {
factorial := 1
for i := n; i > 0; i-- {
factorial = i * factorial
}
return factorial
}
結(jié)果:
aab -> 3
helo -> 24
hello -> 60
helllo -> 120

TA貢獻(xiàn)1785條經(jīng)驗(yàn) 獲得超4個贊
您可以使用一些組合。首先計(jì)算每個字符的出現(xiàn)次數(shù)。然后使用牛頓符號,您將每個字符放在其位置上。例如給定的單詞
aabcdee
你有7個地方可以放置單個字母,你有重復(fù)的 - 雙a和雙e.
所以你使用這個公式
,你可以放在7個地方中的2個,然后你可以乘以你可以放置b的地方的數(shù)量 - 5個剩余地方中的1個。然后在1/4上。然后在1/3上。然后在2/2上。
將這些公式中的每一個相乘都會得到線性時間內(nèi)的字謎數(shù)(如果使用哈希圖進(jìn)行字母計(jì)數(shù))。a
c
d
e
- 3 回答
- 0 關(guān)注
- 101 瀏覽
添加回答
舉報