题目: 把n个骰子仍在地上,所有骰子朝上一面的点数之和为s。输入n,打印出s的所有可能的值出现的概率。 思路: s可能出现的值的范围为:n--6*n 1、全排列 回溯法枚举n个骰子(6面)的全排列,然后计算每一次排列所有值的和,并统计该和的出现的次数,除以6^n(全排列的全部可能性 ...
引言:写这篇文章的初衷只是想做个笔记,因为这道题代码量有点大,有点抽象,而书上并没有详细的注释。为了加深印象和便于下次复习,做个记录。 原题:把n个骰子扔到地上,所有骰子朝上一面的点数之后为s. 输入n,打印出s所有可能的值出现的概率。 每个骰子 个面,点数从 到 解法一:基于递归,时间效率不高 递归的思想一般是分而治之,把n个骰子分为第一个和剩下的n 个。先计算第一个骰子每个点数出现的次数,再计 ...
2017-05-23 22:30 1 3223 推荐指数:
题目: 把n个骰子仍在地上,所有骰子朝上一面的点数之和为s。输入n,打印出s的所有可能的值出现的概率。 思路: s可能出现的值的范围为:n--6*n 1、全排列 回溯法枚举n个骰子(6面)的全排列,然后计算每一次排列所有值的和,并统计该和的出现的次数,除以6^n(全排列的全部可能性 ...
一.题目描述 把n个骰子仍在地上,所有的骰子朝上的一面的点数之和为s,输入n,打印出s所有可能的值出现的概率。 二.题解 《剑指offer》上给出的两种方法,尤其是代码,晦涩难懂且没有注释。而n个骰子的问题实质就是一个动态规划问题,所以文本主要从动态规划的角度来求解这个问题 ...
本文参考自《剑指offer》一书,代码采用Java语言。 更多:《剑指Offer》Java实现合集 题目 把n个骰子扔在地上,所有骰子朝上一面的点数之和为s。输入n,打印出s的所有可能的值出现的概率。 思路 对于n个骰子,要计算出每种点数和的概率,我们知道投掷n个骰子 ...
题意: 给定一个整数n,求1~n这n个整数中十进制表示中1出现的次数。 思路: 方法1:最直观的是,对于1~n中的每个整数,分别判断n中的1的个数,具体见《剑指offer》。这种方法的时间复杂度为O(N*logN),当N比较大的时候,一般会超时。 方法2:这种类别的题目 ...
【面试题043】n个骰子的点数 题目: 把n个骰子扔在地上,所有骰子朝上一面的点数之和为s, 输入n,打印出s的所有可能的值出现的概率。 n个骰子的总点数,最小为n,最大为6n,根据排列组合的知识 ...
目录 前言 面试题4 二维数组的查找 一维二分法 二维查找法 面试题5:替换空格 伪新建数组法 从后往前法 面试题6:从尾到头打印链表 面试题7:重建二叉树 题解 ...
一、题目:打印1到最大的n位数 题目:输入数字n,按顺序打印出从1最大的n位十进制数。比如输入3,则打印出1、2、3一直到最大的3位数即999。 二、不同的解法 2.1 不假思索的解法 最容易想到的办法是先求出最大的n位数,然后用一个循环从1开始逐个打印 ...
题目:输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数。例如输入12,从1到12这些整数中包含1的数字有1,10,11和12,1一共出现了5次。 解法一:不考虑时间效率的解法(略) ps:我感觉是个程序员都能想到这第一种解法,时间复杂度O(nlogn)。这个方法没有什么意义 ...