657. Judge Route Circle

来源:互联网 发布:芙莉西亚之虫惑魔淘宝 编辑:程序博客网 时间:2024/05/20 21:48

问题描述:一个机器人,上(U)下(D)左(L)右(R)移动,给定一个UDLR组成的字符串。判断机器人移动后能否回到原点。
原答案如下:

public boolean judgeCircle(String moves) {        int length=moves.length();        int lr=0;        int ud=0;        String s="";        for(int i=0;i<length;i++){            char c=moves.charAt(i);            s=String.valueOf(c);            if("U".equals(s))                ud++;            else if("D".equals(s))                ud--;            else if("L".equals(s))                ++lr;            else if("R".equals(s))                lr--;        }        if(lr==0)            if(ud==0)                return true;        else            return false;        else            return false;    }

浏览了前几项后最佳答案如下(尽管最佳答案不是运行最快的答案):

public boolean judgeCircle(String moves) {        int[] count = new int[256];        for(char c : moves.toCharArray()){            count[c]++;        }        return count['U'] == count['D'] && count['L'] == count['R'];    }

修改原因:
1、数组取数会更快。
2、原答案中每次都要新生成一个String对象,耗费开销。然而char型是可以直接使用==判断的。
3、if else比较会慢些。换成switch会更快。

并不是一个很有趣的问题,难怪赞同反对的人数基本一样多。

原创粉丝点击