趋势科技笔试第二题 简单点说就是深度优先搜索

public class Combination {
    public static int getCombinations(int[] numbers, int target) {
        List<List<Integer>> total = new ArrayList<>();
        List<Integer> list = new ArrayList<>();
        if (numbers == null || numbers.length <= 0)
            return -2;
        calculate(total,target,list,numbers);

        if (total == null)
            return -1;
        int length = 0;
        for (List<Integer> result:total)
            length += result.size();
        return length;
    }

    public static void calculate(List<List<Integer>> total, int target,List<Integer> list,int[] numbers){
        if (target == 0){
            ArrayList<Integer> resultList = new ArrayList<>(list);
            if (IsValid(resultList,numbers))
                if (contains(total,resultList) == false)
                    total.add(resultList);
            return;
        }

        int[] a = {1,5,10,20,50,100};

        for (int i=0;i<a.length&&a[i]<=target;i++){
            target -= a[i];
            list.add(a[i]);
            calculate(total,target,list,numbers);
            target += list.get(list.size()-1);
            list.remove(list.size()-1);

        }
    }

    public static boolean IsValid(List<Integer> list, int[] numbers){
        Map<Integer,Integer> map = new HashMap<>();
        int[] a = {1,5,10,20,50,100};
        for (int i=0;i<a.length;i++)
            map.put(a[i],0);

        for (int k:list){
            map.put(k,map.get(k)+1);
        }

        List<Integer> values = new ArrayList<>(map.values());
        for (int i=0;i<numbers.length;i++) {
            if (values.get(i) > numbers[i])
                return false;

        }
        return true;
    }

    public static boolean contains(List<List<Integer>> total, List<Integer> list){
        Collections.sort(list);
        if (total.contains(list))
            return true;
        return false;
    }

    public static void main(String[] args) {
        int numbers[] = {6,5,4,3,2,1};
        int length = Combination.getCombinations(numbers,11);
        System.out.println(length);

    }
}

#趋势科技##笔试题目#
全部评论
楼主ac了?我测试了下感觉结果有点问题啊
1 回复 分享
发布于 2019-08-11 18:26

相关推荐

点赞 评论 收藏
分享
11-11 17:45
门头沟学院 Java
扶老蟑螂过马路被无证...:1. 技术栈那里把数据结构删了,小中厂用不上,大厂手撕能难死你,linux那里可以考虑删掉,还不如换个git团队协作开发 2.不要使用一些项目不匹配的技术,例如分库分表和你上边的ddd,真正使用ddd的都是【超】大规模,大部分都仍然使用多模块聚合mvc,这样虽然看起来高大上,但是新增了前期协定需求跟后期维护的成本,因为开发中都是选择最适合当起版本的开发方式跟中间件,这样反而会体现你为了学而学(因为可能面试官都不完全熟悉ddd,然后问你你也回答不出深度) 3.项目写了很多的redis使用,为什么技术栈不写上redis 4.项目技术栈跟业务需求高度重合,完全可以整合成一个,然后再去弄一个感兴趣的其他业务或者轮子,或者把上面的一个换下包装 5.奖项自己编一点奖学金,加个四六级,删掉蓝桥杯
点赞 评论 收藏
分享
评论
1
6
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务