题目链接:https://leetcode-cn.com/problems/fizz-buzz/ 题目描述: 写一个程序,输出从 1 到 n 数字的字符串表示。
如果 n 是3的倍数,输出“Fizz”;
如果 n 是5的倍数,输出“Buzz”;
3.如果 n 同时是3和5的倍数,输出 “FizzBuzz”。
示例:
n = 15, 返回: [ "1", "2", "Fizz", "4", "Buzz", "Fizz", "7", "8", "Fizz", "Buzz", "11", "Fizz", "13", "14", "FizzBuzz" ]时间复杂度:O(N),空间复杂度:O(1)
class Solution { public List<String> fizzBuzz(int n) { List<String> ans = new ArrayList<String>(); for(int i=1;i<=n;i++) { //标记是3的倍数 boolean isMultiple3 = (i % 3 == 0); //标记是5的倍数 boolean isMultiple5 = (i % 5 == 0); //如果既是3的倍数又是5的倍数,将“FizzBuzz”加入ans if(isMultiple3 && isMultiple5) { ans.add("FizzBuzz"); } //如果只是3的倍数,将“Fizz”加入ans else if(isMultiple3) { ans.add("Fizz"); } //如果只是5的倍数,将“Bizz”加入ans else if(isMultiple5) { ans.add("Buzz"); } //如果既不是3的倍数又不是5的倍数,将这个数转换为String型加入ans else { ans.add(Integer.toString(i)); } } return ans; } }时间复杂度:O(N),空间复杂度:O(1)
//不使用取模运算 class Solution { public List<String> fizzBuzz(int n) { List<String> ans = new ArrayList<String>(); int fizz = 3; int buzz = 5; for(int i=1;i<=n;i++) { if(i == fizz && i == buzz) { //满足条件时,说明既是3的倍数又是5的倍数 ans.add("FizzBuzz"); //同时,fizz+3,buzz+5,下一个能被3整除和被5整除的数 fizz+=3; buzz+=5; } else if(i == fizz) { //满足说明只能被3整除 ans.add("Fizz"); //同时,fizz+3,标记下一个能被3整除的数 fizz+=3; } else if(i == buzz) { //能被5整除的数 ans.add("Buzz"); //同时,bizz+5,标记下一个能被5整除的数 buzz+=5; } else ans.add(Integer.toString(i)); } return ans; } }时间复杂度:O(N),空间复杂度:O(1)
//减少一次判断 class Solution { public List<String> fizzBuzz(int n) { List<String> ans = new ArrayList<String>(); for(int i=1;i<=n;i++) { //标记可以被3整除 boolean isMultiple3 = (i % 3 == 0); //标记可以被5整除 boolean isMultiple5 = (i % 5 == 0); //s记录这个数的整除结果对应的字符串 String s = ""; //如果能被3整除,就加入"Fizz" if(isMultiple3) { s+="Fizz"; } //如果能被5整除,就加入"Bizz" if(isMultiple5) { s+="Buzz"; } //如果此时s什么都没加入,说明这个数既不能被3整除,也不能被5整除 if(s == "") { s+=Integer.toString(i); } //将这个数对应的结果加入ans中 ans.add(s); } return ans; } }时间复杂度:O(N),空间复杂度:O(1)
//使用哈希表存放整除数(3、5)和其对应字符("Fuzz"、"Buzz")的键值对 //当这种映射关系很多时,可以试用哈希表。更好维护。 class Solution { public List<String> fizzBuzz(int n) { List<String> ans = new ArrayList<String>(); //使用哈希表来存放分别以3和5为key,"Fizz"和“Buzz”为value的键值对 HashMap<Integer,String> fizzbuzzDist = new HashMap<Integer,String>() { { put(3,"Fizz"); put(5,"Buzz"); } }; for(int i=1;i<=n;i++) { String s = ""; //对dist中的每个key进行判断,是否可以整除。如果可以则s加上其对应的value for(Integer key : fizzbuzzDist.keySet()) { if(i % key == 0) { s += fizzbuzzDist.get(key); } } if(s == "") { s += Integer.toString(i); } ans.add(s); } return ans; } }