【leetcode】1259.Handshakes That Don't Cross
题目如下:


解题思路:动态规划。记dp[i] = v表示由i个人组成的圈子一共有v种握手的方法。对于一个由n个人组成的圈子,编号为0的人一共可以和编号为 (1,3,5....,n-1)的握手,这也很好理解,假设编号为0的人和编号为2的人握手,那么编号为1的人就被包在两人的连线的一侧,而同侧没有其他人可以握手。假设编号为0的人和编号为i的人握手,可以理解成0~i之间的连线把其余人分成了两部分,一部分的人编号是1~i-1,另外一部分的编号是i+1~n-1,这两部分分别形成独立的圈子,所以编号为0的人和编号为i的人握手时,可以握手的组合的总数就应该dp[i-1] * dp[n-i-1],最后只要累计编号为0的人分别和编号为 (1,3,5....,n-1)的总数即可。这里有一个例外,就是0和1握手或者0和n-1握手,这种方式并没有把剩余的人分成两个圈子,而是一个圈子。
代码如下:
class Solution(object):
def numberOfWays(self, num_people):
"""
:type num_people: int
:rtype: int
"""
num_people += 1
dp = [0] * (num_people)
dp[2] = 1
for i in range(4,num_people,2):
for j in range(2,i+1,2):
left = (j - 1 - 1)
right = (i - j) if left == 0:
dp[i] += dp[right]
elif right == 0:
dp[i] += dp[left]
else:
dp[i] += dp[left] * dp[right]
return dp[-1] % (10**9 + 7)
【leetcode】1259.Handshakes That Don't Cross的更多相关文章
- 【LeetCode】Minimum Depth of Binary Tree 二叉树的最小深度 java
[LeetCode]Minimum Depth of Binary Tree Given a binary tree, find its minimum depth. The minimum dept ...
- 【Leetcode】Pascal's Triangle II
Given an index k, return the kth row of the Pascal's triangle. For example, given k = 3, Return [1,3 ...
- 53. Maximum Subarray【leetcode】
53. Maximum Subarray[leetcode] Find the contiguous subarray within an array (containing at least one ...
- 27. Remove Element【leetcode】
27. Remove Element[leetcode] Given an array and a value, remove all instances of that value in place ...
- 【刷题】【LeetCode】007-整数反转-easy
[刷题][LeetCode]总 用动画的形式呈现解LeetCode题目的思路 参考链接-空 007-整数反转 方法: 弹出和推入数字 & 溢出前进行检查 思路: 我们可以一次构建反转整数的一位 ...
- 【刷题】【LeetCode】000-十大经典排序算法
[刷题][LeetCode]总 用动画的形式呈现解LeetCode题目的思路 参考链接 000-十大经典排序算法
- 【leetcode】893. Groups of Special-Equivalent Strings
Algorithm [leetcode]893. Groups of Special-Equivalent Strings https://leetcode.com/problems/groups-o ...
- 【leetcode】657. Robot Return to Origin
Algorithm [leetcode]657. Robot Return to Origin https://leetcode.com/problems/robot-return-to-origin ...
- 【leetcode】557. Reverse Words in a String III
Algorithm [leetcode]557. Reverse Words in a String III https://leetcode.com/problems/reverse-words-i ...
随机推荐
- 开启httpfs
参考: https://docs.cloudera.com/documentation/enterprise/6/6.2/topics/admin_httpfs.html#xd_583c10bfdbd ...
- CDH目录
配置文件都在:/etc/服务名, 看hadoop的classpath |grep conf /etc/hadoop/conf log都在: /var/log/服务名 看scm的log: tail -1 ...
- 安装破解MyEclipse2017CI
一.下载 1.Myeclipse官网下载地址:http://www.myeclipsecn.com/download/ 2.破解补丁链接:https://pan.baidu.com/s/1Ge_fbm ...
- Hive怎么使用远程连接
HIVE的连接模式== 本地连接模式 直接启动hive命令 HIVE的远程连接 这里要启动HIVE的服务 thirft进行编写 hiveserver2 —- > 前台启动 后台启动 前台启动 h ...
- Docker部署前后端项目
本地(ubuntu19.04)安装docker: sudo apt install docker.io SSH连接服务器: 安装Docker: yum update yum -y install do ...
- 从入门到自闭之Python序列化
序列化(背) json :将数据类型转换成字符串(序列化),将字符串装换成原数据类型(反序列),支持dict,list,tuple等,序列后都变成了列表 dumps,loads ------ 用于网络 ...
- scrapyd使用教程
1. 安装服务器: pip install scrapyd 启动: scrapyd 访问:127.0.0.1:6800 2. 安装客户端 pip install scrapyd-client 3. 进 ...
- 封装H5ToApp方法
方法一: 新建个 Android studio 项目,用 webview 指定访问你的页面 方法二: 使用工具 cordova 附上地址:http://cordova.axuer.com/docs/ ...
- 借用jquery实现:使浏览器的“前进”按钮功能失效
我借用jquery实现了这种效果,但并没有禁用掉浏览器本身的“前进”按钮,以下是代码,希望有用的朋友借鉴以下: $(function () { jQuery(window).bind("un ...
- JRebel最新破解激活版(IDEA自动部署插件)
参考: https://www.52pojie.cn/thread-906163-1-1.html https://blog.csdn.net/xingbaozhen1210/article/deta ...