码迷,mamicode.com
首页 > 其他好文 > 详细

401. Binary Watch -- back tracking

时间:2018-11-10 15:57:53      阅读:161      评论:0      收藏:0      [点我收藏+]

标签:++   9.png   ima   move   private   i++   art   min   solution   

题意: 给你个二进制手表,上面 有两排LED等,第一排为hour, 第二排为minutes。 

           告诉你表上有n 个LED 灯亮着,输出所有可能的时间。

技术分享图片

题解:  把上面 10个 LED 等 抽象成10个数 0~9, 现在亮着 n (n<9) 个灯,表示从 nums 里 取出  n 个数的“排列” 

 int[] nums = {0,1,2,3,4,5,6,7,8,9};

对于求解时间,可以用如下map, 如果 num <=5 表示 mins, 剩下的 为hour
int[] map = {1,2,4,8,16,32,1,2,4,8};

需要注意判定不合法的时间, hour>=12, mins>=60 则不合法。 还有注意输出格式, hour 可以是1位到2位, min 必须保持两位, 也就是说 min<=9 前面要补0. 

code 如下: 

class Solution {
    public List<String> readBinaryWatch(int n) {
        
        int[] nums = {0,1,2,3,4,5,6,7,8,9};
        
        int[] map = {1,2,4,8,16,32,1,2,4,8};
        
        List<String> result = new ArrayList<>();
        
        dfs(new ArrayList<>(), result, nums, n,0 , map) ;
        
        return result;
    }
    
    private void dfs(List<Integer> curResult, List<String> result, int[] nums, int n,int start,int[] map){
        if(curResult.size() == n){
             String time = convert_time(curResult,map);
             if(!time.equals("-1")) result.add(time);
              return;   
        }
        
        for(int i=start; i<nums.length; i++){
            curResult.add(nums[i]);
            dfs(curResult,result,nums,n,i+1,map);
            curResult.remove(curResult.size()-1);
        }
    }
    
    private String convert_time(List<Integer> list, int[] map){
        int hour = 0;
        int min = 0;
        for(int num: list){
            if(num<=5){
                min += map[num];
            }
            else{
               hour += map[num]; 
            }
            
            if(min>=60 || hour>=12) return "-1";
        }
        
        return String.valueOf(hour) + ":" +(min < 10 ? "0"+ String.valueOf(min): String.valueOf(min));
    }
}

 

401. Binary Watch -- back tracking

标签:++   9.png   ima   move   private   i++   art   min   solution   

原文地址:https://www.cnblogs.com/keepAC/p/9939568.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!