要自己写个全排列,先是自己想,gg了,gg的点就是swap那里不懂,看了大佬的,懂了。一天之后回来写,手边还有一堆事但是明天就要上课了所以先写这个。
看了大佬的代码,差不多懂了。之前最不懂的,是那个swap()交换函数,因为要不断地“独立”出一个来,而独立出的数,是不同的,所以要用到交换函数,不断地和后方交换同时向后逼近。大佬程序:点击打开链接
swap那里用到了引用参数,这是java没有的,于是去查了查这个引用参数,形式参数和引用参数对比看这里:点击打开链接 和这里:点击打开链接 (知识点1 get)
然后我这个人看搜索结果总是看好多个,于是发现了全排列的其余写法。
首先看这里:点击打开链接 这里用的是个指针,嗨呀,于是去看指针的相关内容,这里:点击打开链接 (指针和引用的区别)还有这里:点击打开链接 我的妈呀,没怎么懂,但是有看到指针所指向的地址,就是a的地址,所以那里用指针也没差??叹个气,应该是这样子吧,指针略难,留下专门研究。
然后,又想到全排列的java写法,swap貌似和c++是不一样的,看这里:点击打开链接 重点是交换地时候也是用的形式参数,用java手写了一下,java的形参也不会改变传入的值的真实内容,是把值copy过去了而不是地址。
那边博客皮肤更新中,先去看一下之前打开的栈堆的内容。先看这里:点击打开链接 大体了解了堆栈咋回事,然后这里的堆栈和数据机构中的堆栈还特么不是一回事,好了,去看数据结构中的堆栈:点击打开链接 点击打开链接 理解起来不难,就是拿来用的。
好了这里看完了再回去看java中形参的处理方式,引用传递,就是传递对象,是new出来的,堆内存里,是地址,所以不是copy的值,所以真正的改变了。那么回去看Java的全排列,先看一下数组的初始化方式的区别:点击打开链接
关于是否是因为静态的初始化而导致的是直接交换,貌似是,因为上面的c++引用参数就是,留下试一试日后。
这篇先到这里,还有比赛没做完,这周末估计就肝这个了……英语日常啊,叹个气,希望别落下吧。