题目链接

LeetCode 1227. 飞机座位分配概率[1]

题目描述

有n位乘客即将登机,飞机正好有n个座位。第一位乘客的票丢了,他随便选了一个座位坐下。

剩下的乘客将会:

  • 如果他们自己的座位还空着,就坐到自己的座位上。
  • 当他们自己的座位被占用时,随机选择其他座位。

第 n位乘客坐在自己的座位上的概率是多少?

示例1


输入:
n = 1
输出:
1.00000
解释:
第一个人只会坐在自己的位置上。


示例2


输入:
n = 2
输出:
0.50000
解释:
在第一个人选好座位坐下后,第二个人坐在自己的座位上的概率是 0.5。


题解

这题呢代码相当之简单,但是我看了看题解区能真正理解的也不是很多,很多都是揣着糊涂装明白,稀里糊涂就当证过了。

首先题目并没有说第一个乘客座位号就是1

啊?也没说最后一个乘客座位号就是n啊?所以大家的假设是怎么来的?这一点没有说清。其实很简单,不管每个乘客编号是多少,我们不用管,我们只要看他入场的次序就行了,所以我们就按照入场次序给他们重新编个号,这样的话就是按照1

到n

的编号入场了(也就是这里的编号代表的是入场的次序,而不是实际的座位号)。然后就是1号进场了,可以分为下面几种情况:

【每日算法Day 68】脑筋急转弯:只要一行代码,但你会证吗?_递推

【每日算法Day 68】脑筋急转弯:只要一行代码,但你会证吗?_递归_02

代码

c++


class Solution {
public:
double nthPersonGetsNthSeat(int n) {
return n==1 ? 1 : .5;
}
};


python


class Solution:
def nthPersonGetsNthSeat(self, n: int) -> float:
return 1 if n==1 else .5


参考资料

[1]

LeetCode 1227. 飞机座位分配概率: ​https://leetcode-cn.com/problems/airplane-seat-assignment-probability/