给定一个非负整数n,计算各位数字都不同的数字x的个数,其中0≤x10^n。
示例:
答案:
解析:
这题没什么难度,只要上过高中,学过排列组合的估计都能看懂,我简单介绍一下,当n=1的时候也就是从0-9有多少个数各位数字都不同,很明显是10,当n等于2的时候也就是从10-99有多少个数各位数字都不同,根据排序组合先从1-9中选择一个数字x作为十位数(十位数不能是0),然后再从0-9中选择一个数字y作为个位数,组成一个新的数,其中x!=y,选择x有9种方式,选择y也有9种方式,所以有81种,再加上前面的10种,总共91种。同理当n=3的时候从-中选择有9*9*8种,当n=4的时候从0-9中选择有9*9*8*7种,所以规律很好发现,明白了这点,代码就容易理解多了,我们还可以再来修改一下
上面两种虽然写法有点区别,但思路都是一样的。下面再来看一种递归的方式。
这种解法稍微有一点难度,需要有一定的算法基础知识,否则不容易看懂。他使用递归加回溯的方式,used表示i这个数字被使用过了,当然这种效率很差,但也是一种思路。