排列序號 LintCode

2021-08-07 14:51:30 字數 697 閱讀 3008

給出乙個不含重複數字的排列,求這些數字的所有排列按字典序排序後該排列的編號。其中,編號從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 ...