給出乙個不含重複數字的排列,求這些數字的所有排列按字典序排序後該排列的編號。其中,編號從1開始。
樣例:
例如,排列 [1,2,4] 是第 1 個排列。
思想:
直接計算。
例如:2,3,4,1
首先,另存到乙個陣列中,排序,再利用map,獲得數字與位置的關係;
遍歷陣列a,在本例中,對於2,前面存在以1,開頭的所有排列,個數為3!,
對於3,由於前面是2(注意要將出現在它前置位且比它小的數字去除),則也只存在2,1開頭的排列,個數字2!,以此類推;
#ifndef c197_h
#define c197_h
#include
#include
#include
#include
using
namespace
std;
class solution
long
long count = 1;
for (int i = 0; i < len; ++i)
}count += (m[a[i]]-smal) * recur(len - i - 1);
}return count;
}long
long recur(int a)
};#endif
lintcode 排列序號
想法 1.對於四位數 4213 4 100 2 100 1 10 3 2.4個數的排列有4!種。當我們知道第一位數的時候,還有3!種方式,當知道第二位數時候還有2!種方式,當知道第三位數的時候還有1!種方式,前面三位數都確定的時候,最後一位也確定了。這裡是按照高位到地位的順序 3.對4個數的排列,各...
lintcode 排列序號
給出乙個不含重複數字的排列,求這些數字的所有排列按字典序排序後該排列的編號。其中,編號從1開始。例如,排列 1,2,4 是第 1 個排列。排列一共有n 種,最高位定下來之後一共是n個 n 1 種排列,根據這種性質,可以通過查詢低位比高位小的個數來計算當前位置.比如,1247的排列個數是4 個.尋找2...
Lintcode 197 排列序號
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 ...