21位水仙花数
来源:互联网 发布:linux usleep 毫秒 编辑:程序博客网 时间:2024/06/05 22:31
发现很多算法题目都用到回溯。
很多人都已经提供了思路,之前在算其它数目的水仙花的时候总是出错,发现在dfs()里面每次忘记恢复数据,鼓捣很长时间。
21位大概运行在30秒左右。
import java.math.BigInteger;public class Daffodil {public static int time[];public static int num;public static void main(String[] args){time=new int[10];int num=21;BigInteger fac[]=new BigInteger[10];for(int i=0;i<fac.length;i++){fac[i]=power(BigInteger.valueOf(i),num);}long start=System.currentTimeMillis();dfs(fac,time,0,0,num);long end=System.currentTimeMillis();System.out.print("时间:");System.out.println(end-start);}public static BigInteger power(BigInteger m,int n){BigInteger p=BigInteger.ONE;for(int i=0;i<n;i++){p=p.multiply(m);}return p;}public static void sum(BigInteger fac[], int time[],int num){BigInteger sum=BigInteger.ZERO;for(int i=0;i<10;i++){sum=sum.add(fac[i].multiply(BigInteger.valueOf(time[i])));}String s=""+sum;if(s.length()!=num) return ;int nn2[]=new int[10];for(int i=0;i<num;i++){nn2[s.charAt(i)-'0']++;}for(int i=0;i<10;i++){if(time[i]!=nn2[i]) return;}System.out.println(s);}public static void dfs(BigInteger fac[],int time[],int m,int n,int num){if(n==num){sum(fac,time,num);}else{for(int i=0;i<=num-n;i++){if(m>9)return;time[m]=i;dfs(fac,time,m+1,n+i,num);time[m]=0;//重置}}}}
- 21位水仙花数
- 21位水仙花数
- 21位水仙花数
- 21位水仙花数
- 21位水仙花数
- 21位水仙花数(花朵数 )
- 21位水仙花数用java实现
- 21位水仙花数(C语言)
- 蓝桥杯 21位的水仙花数
- 21位水仙花数—题解
- n位水仙花数
- n位水仙花数 .
- 多位水仙花数
- 寻找21位或者更多位的水仙花数
- 【学习笔记】蓝桥杯 花朵数(21位水仙花数)
- k 位的水仙花数
- 多位水仙花数算法
- 水仙花数(多位)
- Eclipse中修改SVN目标服务器IP地址的方法
- 黑马程序员_C#语言基础知识概括
- struts+spring+hibernate无法插入数据库数据的问题
- Linux平台Makefile文件的编写基础篇
- WebKit事件派发
- 21位水仙花数
- JS实现搜索框动态效果
- 黑马程序员_C#面向过程小结
- Linux分布式编译环境搭建介绍
- myeclipse中如何导入一个已有项目
- 黑马程序员_面向对象基础解读
- sizeof 与 strlen的区别
- .黑马程序员_窗体应用程序WinForm基础解读
- INSTALL_FAILED_INSUFFICIENT_STORAGE