# 排列序列

<p>给出集合 <code>[1,2,3,...,n]</code>，其所有元素共有 <code>n!</code> 种排列。</p><p>按大小顺序列出所有排列情况，并一一标记，当 <code>n = 3</code> 时, 所有排列如下：</p><ol>	<li><code>"123"</code></li>	<li><code>"132"</code></li>	<li><code>"213"</code></li>	<li><code>"231"</code></li>	<li><code>"312"</code></li>	<li><code>"321"</code></li></ol><p>给定 <code>n</code> 和 <code>k</code>，返回第 <code>k</code> 个排列。</p><p> </p><p><strong>示例 1：</strong></p><pre><strong>输入：</strong>n = 3, k = 3<strong><br />输出：</strong>"213"</pre><p><strong>示例 2：</strong></p><pre><strong>输入：</strong>n = 4, k = 9<strong><br />输出：</strong>"2314"</pre><p><strong>示例 3：</strong></p><pre><strong>输入：</strong>n = 3, k = 1<strong><br />输出：</strong>"123"</pre><p> </p><p><strong>提示：</strong></p><ul>	<li><code>1 <= n <= 9</code></li>	<li><code>1 <= k <= n!</code></li></ul>

以下程序实现了这一功能，请你填补空白处内容：

```java
class Solution {
	public String getPermutation(int n, int k) {
		StringBuilder sb = new StringBuilder();
		List<Integer> candidates = new ArrayList<>();
		int[] factorials = new int[n + 1];
		factorials[0] = 1;
		int fact = 1;
		for (int i = 1; i <= n; ++i) {
			candidates.add(i);
			fact *= i;
			factorials[i] = fact;
		}
		k -= 1;
		____________________;
		return sb.toString();
	}
}
```

## template

```java
class Solution {
	public String getPermutation(int n, int k) {
		StringBuilder sb = new StringBuilder();
		List<Integer> candidates = new ArrayList<>();
		int[] factorials = new int[n + 1];
		factorials[0] = 1;
		int fact = 1;
		for (int i = 1; i <= n; ++i) {
			candidates.add(i);
			fact *= i;
			factorials[i] = fact;
		}
		k -= 1;
		for (int i = n - 1; i >= 0; --i) {
			int index = k / factorials[i];
			sb.append(candidates.remove(index));
			k -= index * factorials[i];
		}
		return sb.toString();
	}
}
```

## 答案

```java
for (int i = n - 1; i >= 0; --i) {
	int index = k / factorials[i];
	sb.append(candidates.remove(index));
	k -= index * factorials[i];
}
```

## 选项

### A

```java
for (int i = n - 1; i >= 0; --i) {
	int index = k / factorials[i];
	sb.append(candidates.remove(index));
	k = index * factorials[i];
}
```

### B

```java
for (int i = n - 1; i >= 0; --i) {
	int index = k / factorials[i];
	sb.append(candidates.remove(index));
	k += index * factorials[i];
}
```

### C

```java
for (int i = n; i >= 0; --i) {
	int index = k / factorials[i - 1];
	sb.append(candidates.remove(index));
	k -= index * factorials[i];
}
```