黑马程序员技术交流社区

标题: 笔试时的算法题。 [打印本页]

作者: Always,    时间: 2015-5-11 12:45
标题: 笔试时的算法题。
输入一个字符串,显示出字符串的所有排列。例如:输入"abc",就得输出"abc"、"acb"、"bac"、"bca"、"cab"、"cba" 所有可能的序列。


作者: 柳叶飞刀    时间: 2015-5-11 12:48
用位运算可以实现不?
作者: Always,    时间: 2015-5-11 12:52
柳叶飞刀 发表于 2015-5-11 12:48
用位运算可以实现不?

import java.util.Arrays;
public class CharList {

    //遍历所有可能的排列结果
    public static void traversal(char[] chss, int index){
        //for循环,从index位置开始向前(向右), index位置的数与i位置的数互换
        for(int i = index; i < chss.length; i ++) {
            char[] chs = Arrays.copyOf(chss, chss.length);    //Copy出新数组(为了修改其值时互不影响)
            char temp = chs[index];
            chs[index] = chs;
            chs = temp;
            if(index == chs.length-1) {    //到了字符串末, 输出结果
                System.out.println(new String(chs));
                break;    //跟出此次循环, 此traversal方法执行完毕,跳回上一级循环(在上一个方法体中)
            }
            traversal(chs, index+1);        //递归
        }
    }

    //Test
    public static void main(String[] args) {
        String str = "abcd";
        char[] chs = str.toCharArray();    //转成字符数组
        traversal(chs, 0);
    }

}


用递归的话可以实现,位运算没有试过。
作者: zgjswp    时间: 2015-5-11 13:33
Always, 发表于 2015-5-11 12:52
import java.util.Arrays;
public class CharList {

楼主是现场笔试吗?
作者: 大西洋    时间: 2015-5-11 13:45
0 0 用笔写吗??

这个能一次性写出来??

程序不是逐渐增加的么;一次写出来,除非背下来。。。
作者: fantacyleo    时间: 2015-5-11 14:09
大西洋 发表于 2015-5-11 13:45
0 0 用笔写吗??

这个能一次性写出来??

大多数算法题只用到少量基本的API和常见数据结构,写不出来是思路问题,不是背不背得下来的问题
作者: 大西洋    时间: 2015-5-11 16:49
fantacyleo 发表于 2015-5-11 14:09
大多数算法题只用到少量基本的API和常见数据结构,写不出来是思路问题,不是背不背得下来的问题 ...

感谢回答,我有时候看到老师写代码,都是这里加一点,那里加一点,最后才变成一段完整的;
笔试的话,除非用铅笔+橡皮擦,如果用圆珠笔岂不是画的一团糟。。。?
作者: YQliang    时间: 2015-5-11 18:23
这个跟数组排序差不多  用第三方接收  然后改变位置  创建一个换位置的方法
作者: w401634075    时间: 2015-5-11 18:30
我觉得能不能把abc存入集合ArrayList,在将集合的索引对应的排序,再取值输出转成字符串,输出。
作者: 1017161726    时间: 2015-5-11 18:38
据说转成数组然后遍历好做
作者: Super_Nos    时间: 2015-5-11 19:17
全排列,康拓展开~
作者: 破烂小白    时间: 2015-5-11 19:23
用循环解决 +IndexOf 就可以搞定
作者: brouse    时间: 2015-5-11 21:00
你已经笔试过了吗
作者: l763631191    时间: 2015-5-11 21:09
本帖最后由 l763631191 于 2015-5-11 21:19 编辑

这样的考题真的有意思么
作者: 空--格    时间: 2015-5-11 21:40
其实只要有思路 就好做了
作者: 0416-孙磊    时间: 2015-5-11 21:42
谢谢,这个可以说很有帮助
作者: Always,    时间: 2015-5-13 10:50
zgjswp 发表于 2015-5-11 13:33
楼主是现场笔试吗?

   这是公司面试时候的题目。
作者: Always,    时间: 2015-5-13 10:51
大西洋 发表于 2015-5-11 13:45
0 0 用笔写吗??

这个能一次性写出来??

           用IDE写出来的,,不是用笔写,,
作者: Always,    时间: 2015-5-13 10:53
大西洋 发表于 2015-5-11 16:49
感谢回答,我有时候看到老师写代码,都是这里加一点,那里加一点,最后才变成一段完整的;
笔试的话,除非 ...

               IDE工具有很多可以自动生成的代码,如果是不是核心代码的话一般你cv的话也是可以的,不过具体的代码简化跟核心功能需要你详细的实现。
作者: Always,    时间: 2015-5-13 10:54
w401634075 发表于 2015-5-11 18:30
我觉得能不能把abc存入集合ArrayList,在将集合的索引对应的排序,再取值输出转成字符串,输出。 ...

              大家有空可以自己写写试试,实现核心功能就好,代码还是可以有很多种方法的。
作者: Always,    时间: 2015-5-13 10:55
brouse 发表于 2015-5-11 21:00
你已经笔试过了吗

没有,目前还在学习中
作者: Always,    时间: 2015-5-13 10:56
l763631191 发表于 2015-5-11 21:09
这样的考题真的有意思么

            大概让活跃思维用的,真正在公司的话,这些东西就有些鸡肋了。
作者: Always,    时间: 2015-5-13 10:59
大西洋 发表于 2015-5-11 16:49
感谢回答,我有时候看到老师写代码,都是这里加一点,那里加一点,最后才变成一段完整的;
笔试的话,除非 ...

      我这技术分一直不涨,我也是醉了。。学长有什么建议么




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2