java 全排列非递归算法_我的字典序全排列java程序,怎么改成非递归算法
展开全部
package Lianxi.yong2;
import java.util.LinkedList;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
62616964757a686964616fe58685e5aeb931333335303561A a = new A();
}
}
class A {
Scanner cin = new Scanner(System.in);
int n;
char a[];
public A() {
n = cin.nextInt();
a = new char[n];
for (int i = 0; i
a[i] = (char) (i + 49);
}
next();
}
private void next() {
// TODO Auto-generated method stub
for (char i : a) {
System.out.print(i + " ");
}
System.out.println();
LinkedList is = new LinkedList();
LinkedList js = new LinkedList();
is.add(n - 1);
js.add(n - 1);
//假设我们不模拟递归的情况,就模拟多重循环(这比较简单,先做简单的事情)
//但是事实就是其实只要模拟一个多重循环就可以把问题解决了
while (!is.isEmpty() && is.getLast() > 0) {
while (!js.isEmpty() && js.getLast() >= is.getLast()) {
int j = js.getLast();
int i = is.getLast();
js.removeLast();
js.addLast(j - 1);
if (a[j] > a[i - 1]) {
swap(j, i - 1);
daoxu(i);
for (char c : a) {
System.out.print(c + " ");
}
System.out.println();
is.add(n - 1);
js.add(n - 1);
}
}
js.removeLast();
js.addLast(n - 1);
is.addLast(is.removeLast()-1);
}
}
private void daoxu(int i) {
// TODO Auto-generated method stub
int j = n - 1;
for (int i2 = 0; i + i2
if (i + i2
swap(i + i2, j - i2);
}
}
private void swap(int i, int j) {
// TODO Auto-generated method stub
char temp;
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
我不知道你的算法是否正确,但是如果8 9的话是得不到正确的结果的,不过我改写的竟然可以得到正确的结果,真是奇怪
java 全排列非递归算法_我的字典序全排列java程序,怎么改成非递归算法相关推荐
- php 登录 非空验证,Ecshop会员注册的Email 电子邮箱改成非必填项 并带非空验证邮箱合法性...
1.修改模板文件 *去掉*号就好 2.打开 /js/user.js 文件,找到下面JS代码段并修改(大概在466行左右) if (email.length == 0) { msg += email_ ...
- C# Windows Phone 8 WP8 开发,将WebClient的DownloadStringCompleted事件改成非同步的awiat方法。...
C# Windows Phone 8 WP8 开发,将WebClient的DownloadStringCompleted事件改成非同步的awiat方法. 原文:C# Windows Phone 8 W ...
- java青蛙过河打字_趣味算法——青蛙过河(JAVA)
青蛙过河是一个非常有趣的智力游戏,其大意如下: 一条河之间有若干个石块间隔,有两队青蛙在过河,每队有3只青蛙,这些青蛙只能向前移动,不能向后移动,且一次只能有一只青蛙向前移动.在移动过程中,青蛙可以向 ...
- java底层原理书籍_阿里面试题:Java中this和super关键字的底层实现原理
知道的越多,不知道的就越多,业余的像一棵小草! 编辑:业余草 来源:https://www.xttblog.com/?p=5028 B 站:业余草 最近一个粉丝加我说,接到了阿里的面试,问问我阿里会面 ...
- java string 常量池_用了这么久Java String,你真的懂字符串常量池吗?
字符串问题可谓是 Java 中经久不衰的问题,尤其是字符串常量池经常作为面试题出现.可即便是看似简单而又经常被提起的问题,还是有好多同学一知半解,看上去懂了,仔细分析起来却又发现不太明白. 本文以 J ...
- java护照号码校验_学无止境之小白学java……第001天
学习主题:预科阶段 对应视频: http://www.itbaizhan.cn/course/id/18.html 对应作业: 1. 为什么需要学编程,什么样的人可以做程序员? 编程是现实逻辑的表达, ...
- java新手练习项目_有哪些好的java项目适合新手练习?
要想学好java技术,找到高薪工作,不仅要掌握扎实的理论知识,也要有一定的实操能力. 遇到问题多查多问,可以上网站进行搜索,可以加一些交流群,还可以多问学校的老师--另外要学会欣赏他人的代码,向成功者 ...
- java面试题成都_成都汇智动力-java面试——多线程面试题
原标题:成都汇智动力-java面试--多线程面试题 1.多线程有什么用?发挥多核CPU的优势 防止阻塞 便于建模 2.创建线程的方式继承Thread类 实现Runnable接口 至于哪个好,不用说肯定 ...
- 网易 java社招面试_十月底—最新网易Java岗社招面试经历分享
image (面试题+答案领取方式:关注公众号白楠楠获取) 网易面试题 面向对象的特点有哪些? 列举几个java常用的package及其作用 接口和抽象类有什么联系和区别 重载和重写有什么区别 jav ...
- java rhino js类_让Rhino JS看Java类
我正在玩 Rhino,我已经成功使用了stdlib中的Java类,但没有使用我编译的Java代码. 例如,这工作正常: print(new java.util.Date()); 但是使用NanoHTT ...
最新文章
- 采用TurboGate邮件网关防止企业邮箱被盗用
- linux wget 下载文件 报错 To connect to xxxx, use ‘--no-check-certificate’ 解决方法
- P4342 [IOI1998]Polygon
- 计算机键盘标注,你所不知道的 Windows 10 小诀窍:万能计算器、虚拟键盘、屏幕截图标注...
- 车间生产能耗管控方案_如何给生产车间降温 环保空调的这些方案一定能帮到你...
- 机器人动力学与控制_力控制与位置控制的区别
- UVA - 10129 Play on Words(欧拉回路)
- LSD-SLAM笔记之DepthMap
- 强制停用华为桌面,换第三方桌面
- 消防信号二总线有没电压_消防主机总线电压偏低 消防二总线详解
- 原版安装Win10 1909专业版 64位MSDN镜像2020 05
- php抽奖简单源码,php转盘抽奖 完整例子源码(含模拟数据)
- 技术管理 - 思维导图(补)
- 123456789 中间随机添加 “加减符号” 进行运算结果等于100
- 基于 HTML5 WebGL 的 3D 水泥工厂生产线
- Dell EMC VxRail
- 体验车联网,你选对物联网卡了吗?
- 改html更改百度首页背景颜色,百度地图_更改标注颜色
- mxGraph绘图区域使用鼠标滚轮实现放大/缩小
- 如何临时修改ip地址,永久修改ip地址
热门文章
- Linux系统编程(4)——文件与IO之ioctl函数
- 3.C#编程指南-字符串
- 几个学习git的地方
- 20款优秀的可以替代桌面软件的Web应用(转载自JavaEye)
- python中求众数_Python实现求众数的三种方法
- excel怎么下方方格子_Excel重复值的坑,你踩过几个?
- linux服务器配置与管理_一个十多年的系统管理员,忘了如何管理一台服务器
- 【视频】时间序列分析:ARIMA-ARCH / GARCH模型分析股票价格
- android富文本文件存储,Android富文本
- c++ math头文件一些函数使用记录