math:
舉例:1, 2, 3, 4
第一位是1,沒有比1小的,所以 0,
第二位是2, 後面沒有比2小的,所以0
…結果 0 + 1 =1
舉例:4, 3, 2, 1
第一位是4,(1,2,3) 小於4,所以 3 * 3!,
第二位是2, (2, 1)小於3,2 * 2!
第三位是2,(1)小於2, 1 * 1!
…結果 3 * 3! + 2 * 2!+ 1 * 1!+ 1 =24
當前的index = 它之前所有字典序的排列的數之和 + 1
舉例:4, 2, 3, 1
第1位,比4小的可能有3位(1,2,3)[1,2,3,4; 2,1,3,4; …],則可能的排列位3 * 3!
確定第1位為4,第二位,比第二位小的為(2),則可能的排列為1 * 2!
確定第二位為3,則比第三位小的只能是(1),其排列為1 * 1!
第四位沒得選,可能的排列為0
結果, 3 * 3! + 1 * 2! + 1 * 1! + 1 = 22
綜上,假設當前第i位的可選candidates數為cand[i] , 則其排列和為sum(candi!)
潛在問題:public
class
solution
} permu *= a.length - i -1;
res += count * permu;
}return res +1;
}}
兩次過 Lintcode 197 排列序號
給出乙個不含重複數字的排列,求這些數字的所有排列按字典序排序後該排列的編號。其中,編號從1開始。樣例 1 輸入 1,2,4 輸出 1樣例 2 輸入 3,2,1 輸出 6需要知道乙個演算法 康托展開。原理介紹 x a 0 n 1 a 1 n 2 a n 1 0 a i 指的是位於位置i後面的數小於a ...
197 排列序號
是 這道題採取暴力解法會超時,應當對於原陣列的每乙個位置找到其後有多少個數比它小,然後再相加這些數與對應的權的成績。class solution long long ans 1,fac 1,cc 1 for int i len 2 i 0 i ans fac cc c i return ans 注意...
leetcode197 排列序號
題目描述 給出乙個不含重複數字的排列,求這些數字的所有排列按字典序排序後該排列的編號。其中,編號從1開始。例如,排列 1,2,4 是第 1 個排列。class solution else return count 運用stl標準庫中的next permutation 方法最方便,但是複雜度過高,不通...