我的评论

re: 求一组序列的全排列[未登录] lanxiazhi 2009-07-29 20:27  
hello,以下是递归java实现:
class Perm
{
static String letters="123456";//任意不重复字符串
static int count;
static void per(StringBuilder sb)
{
if(sb.length()==letters.length())
{
System.out.println(sb);
count++;
return;
}
for(int i=0;i<sb.length()+1;i++)
{
per(sb.insert(i,letters.charAt(sb.length())));
sb.deleteCharAt(i);
}
}
public static void main(String[] args)
{
per(new StringBuilder());
System.out.println(count);
}
}
你好,谢谢你的题目,我写了另外的一个算法:http://www.blogjava.net/lanxiazhi/archive/2009/07/27/288626.html。解法有局限,只是针对这个题写的。
re: 深入理解i++和++i[未登录] lanxiazhi 2009-07-26 22:12  
我来具体说明:
int i=0;
i=i++;
上述两行java代码bytecode如下:
iconst_0 //把常量0放到堆栈
istore_1 //把堆栈上的数(上面那个0)放到存储位置1,也就是i的存储位置,所以i的值就是0了
iload_1 //加载位置1上的整数值到栈顶,就是i,因此栈顶的值是0
iinc 1,1 //把位置1的数,也就是i,自增1,因此i变成了1(注意:iinc指令不会操作堆栈)
istore_1 //把栈顶的那个数,也就是0,存到位置1,因此i的值是0.

int i=0;
i=++i;
-->
iconst_0 //把常量0放到栈顶
istore_1 //把堆栈上的数(上面那个0)放到存储位置1,也就是i的存储位置,所以i的值就是0了,栈顶值不变
iinc 1,1 //把位置1的数,也就是i,自增1,因此i变成了1(注意:iinc指令不会操作堆栈)
iload_1 //加载位置1的数,也就是i的值,1,到栈顶
istore_1//把栈顶的值存到位置1,因此i的值就是1了。

了解字节码的操作:
http://blog.csdn.net/BU_BetterYou/archive/2008/06/16/2553108.aspx
这个问题需要填充N*N个数,所以必须有N*N次操作,从这一层看来,没有改进的余地。你改进的算法只是减少了循环次数,却在每次循环中加倍了操作,还增加了很多判断,我以为,这样速度反而会慢呢。
re: 文本中找最长的回文字符串 lanxiazhi 2009-07-25 19:05  
楼上的朋友,我这是从http://ace.delos.com/usacoprob2?a=ZeOY7JdiFfN&S=calfflac这里贴过来的题目,上面有详细说明,示例输入输出。上面的解答是我自己提供的,因为我觉得java的代码比c/c++的容易一些(java让你更专注于算法,而不用考虑很多语言特性,当然速度会慢一些,不过在这种情况下不明显)。这是一个编程练习平台,任何人都可以注册使用,很方便的。