资讯专栏INFORMATION COLUMN

LintCode Fizz Buzz 只用一个if语句

greatwhole / 2460人阅读

摘要:看了一些答案使用了多个这里给出几种方案给大家参考下建立将所对应的字符串分别映射,这样一个即可对进行优化,只映射,这里需要一点数学技巧,大家看代码就理解了利用的截断功能暂时想到这些,欢迎指正

9.Fizz Buzz

Given number n. Print number from 1 to n. But:

when number is divided by 3, print "fizz".
when number is divided by 5, print "buzz".
when number is divided by both 3 and 5, print "fizz buzz".
Example

If n = 15, you should return:

[
"1", "2", "fizz",
"4", "buzz", "fizz",
"7", "8", "fizz",
"buzz", "11", "fizz",
"13", "14", "fizz buzz"
]

Challenge
Can you do it with only one if statement?

看了一些答案使用了多个if,这里给出几种方案给大家参考下
1、建立HashMap,将3,6,9,12,5,10,0(i%15==0)所对应的字符串分别映射,这样一个if(map.containsKey(i%15))即可

     public static HashMap map = new HashMap<>();
     static{
         map.put(3,"fizz");
         map.put(6,"fizz");
         map.put(9,"fizz");
         map.put(12,"fizz");
         map.put(5,"buzz");
         map.put(10,"buzz");
         map.put(0,"fizz buzz");
     }
    public List fizzBuzz(int n) {
        List ret = new ArrayList<>();
        for(int i=1;i<=n;i++){
            int key = i%15;
            if(map.containsKey(key)){
                ret.add(map.get(key));
            }else{
                ret.add(""+i);
            }
        }
        return ret;
    }

2、对1进行优化,只映射3,5,8,这里需要一点数学技巧,大家看代码就理解了

   public static HashMap map = new HashMap<>();
     static{
         map.put(3,"fizz");
         map.put(5,"buzz");
         map.put(8,"fizz buzz");
     }
    public List fizzBuzz(int n) {
        List ret = new ArrayList<>();
        for(int i=1;i<=n;i++){
            int key = f(i,3)+f(i,5);
            if(map.containsKey(key)){
                ret.add(map.get(key));
            }else{
                ret.add(""+i);
            }
        }
        return ret;
    }
    
    private int f(int i,int k){
        return (k-i%k)*((k-i%k)/k);
    }

3、利用&&的截断功能

      public List fizzBuzz(int n) {
          List ret = new ArrayList<>(n);
            for(int i=1;i<=n;i++){
                String str = null;
                boolean bool1 = i%3==0&&(str="fizz")!=null;
                boolean bool2 = i%5==0&&(str="buzz")!=null&& i%3==0&&(str="fizz buzz")!=null;
                if(str==null){
                    ret.add(""+i);
                }else {
                    ret.add(str);
                }
            }
           
            return ret;
      }

暂时想到这些,欢迎指正

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/77101.html

相关文章

  • [LintCode] Fizz Buzz

    Problem Given number n. Print number from 1 to n. But: when number is divided by 3, print fizz.when number is divided by 5, print buzz.when number is divided by both 3 and 5, print fizz buzz. Example ...

    gaara 评论0 收藏0
  • 算法Training——数学规律

    摘要:计算阶乘中尾部零的个数描述计算出阶乘中尾部零的个数样例,故返回分析对数字做质数分解,例如,可以知道能够在尾部产生零的只有质数和质数的乘积由于是阶乘,质数的个数明显大于质数的个数特别需要注意的是,类似,数字里面是有的指数的因而,总的个数应当是 1.计算阶乘中尾部零的个数 描述: 计算出n阶乘中尾部零的个数 样例: 11! = 39916800,故返回2 分析 对数字做质数分解,例如2...

    lwx12525 评论0 收藏0
  • Leetcode PHP题解--D40 412. Fizz Buzz

    摘要:题目链接题目分析这个题目也很简单。从逐个输出到给定数组,但逢输出,逢输出,逢输出。思路没什么好说的了。用整除判断能否被分别整除或同时整除。然后替换要输出的内容即可。最终代码若觉得本文章对你有用,欢迎用爱发电资助。 412. Fizz Buzz 题目链接 412. Fizz Buzz 题目分析 这个题目也很简单。 从1逐个输出到给定数组,但逢3输出Fizz,逢5输出Buzz,逢15输出F...

    tracymac7 评论0 收藏0
  • The Coding Kata: FizzBuzzWhizz in Java8

    摘要:匹配器是一个一元函数,入参为,返回值为,是一种典型的谓词。执行器也是一个一元函数,入参为,返回值为,其本质就是定制常见的操作,将定义域映射到值域。为一个工厂类,用于生产各种。其中,使用了的。 Functional programming leads to deep insights into the nature of computation. -- Martin Odersky 形式...

    张率功 评论0 收藏0
  • JS 使用短路原理简化条件语句代码

    摘要:首先得介绍下短路原理,一共就以下四点非常关键只要前面为不管后面是还是,都返回后面的值。正常思路也是最简单的思路就是条件语句,如下结束但是代码看起来非常的多,虽然方便阅读,但是不方便装逼啊使用短路原理大大精简条件语句代码,如下怎么样,就一行把 首先得介绍下短路原理,一共就以下四点(非常关键): 1、只要||前面为false,不管||后面是true还是false,都返回||后面的值。 2、...

    yuxue 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<