写一个程序,输出从 1 到 n 数字的字符串表示。
1. 如果 n 是3的倍数,输出“Fizz”;
2. 如果 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" ]
Related Topics
每日一题刷题打卡,15个一组,第3、5、6、9、10、12、15位对应字符串。
剩下的部分自行把int型转为String型,当然你也可以直接使用Integer.toString(num);来实现。
我这边的写法也是参考的Integer.toString(num);的源码来写的,中间省去了一些确定范围之类的逻辑,相对更加简单点。
class Solution {
int [] sizeArray = { 9, 99, 999, 9999, 99999, 999999, 9999999, 99999999, 999999999, Integer.MAX_VALUE };
char[] numArray = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};
boolean[] ifString = {false,false,false,true,false,true,true,false,false,true,true,false,true,false,false,true};
String[] stringArray = new String[]{null,null,null,"Fizz",null,"Buzz","Fizz",null,null,"Fizz","Buzz",null,"Fizz",null,null,"FizzBuzz"};
public List<String> fizzBuzz(int n) {
List<String> list = new ArrayList<>();
int num = 1;
int idx = 1;
while (num <= n){
list.add( ifString[idx] ? stringArray[idx] : numToString(num) );
num ++;
idx = idx==15 ? 1 : idx+1;
}
return list;
}
public String numToString(int num){
int size = stringSize(num);
char[] chars = new char[size];
while (num>0){
chars[--size] = numArray[num%10];
num = num/10;
}
return new String(chars);
}
public int stringSize(int num) {
for (int i=0; ; i++)
if (num <= sizeArray[i])
return i+1;
}
}
正常点来说,你可以选择依次遍历,余3输出”Fizz”、余5输出”Buzz”、都余输出”FizzBuzz”,其他的输出当前数字即可
发表评论