任务1:继续做昨天的Java选择题,如果觉得有疑问的请记录下来,由老师讲解有疑问的题目。
任务2:当你在做任务1感觉枯燥时,可以考虑做做以下三个问题。
问题1:
数字4和7是幸运数字,其他都是非幸运数字。 第1级幸运号码是一个只包含幸运数字的10进制回文正整数【从前读和从后读都相同的数字是回文数字】。给你一个长整型数a和b, 统计该范围内(含a和b)的第1级幸运号码的个数。
定义类和方法如下:
public class TheLuckyNumbersLevelOne{
public long find(long a, long b){
}
}
约束条件:
1<=a<=10^18
1<=b<=10^18
例
0)
1
100
Returns: 4
第1级幸运号码为: 4, 7, 44 和 77.
1)
45
54
Returns: 0
2)
477444774
477444774
Returns: 1
第1级幸运号码为: 477444774
3)
456789123
789123456
Returns: 24
问题2:
数字4和7是幸运数字,所其他数字是非幸运数字。第2级幸运号码是一个只包含4或7的10进制的回文正整数。现有一个整数集合,请找出其和为第2级幸运号码的所有整数子集。
给你一个int[] 数组,表示整数集合,返回一个int[]数组,包含其和为第2级幸运号码的整数子集。返回的整数数组必须以升序排序。如果有多个幸运号码,返回和最大的那个整数子集;如果同一个幸运号码有多个整数子集,返回其字典排序最小的那个整数子集。【字典排序是指给定的两个数组 int[] a1 和 int[] a2,如果a1[0] < a2[0],则a1应排在a2之前。称a1在字典排序中比a2小。】,如果无法组成幸运号码,则返回空。
定义类如下:实现find方法。
public class TheLuckyNumbersLevelTwo{
public int[] find(int[] numbers){}
}
约束:
数组 numbers中元数个数大于等于1,小于等于34。
1 <= numbers[i] <= 1,000,000,000,其中 1<=i<=34.
例:
0)
{1, 2, 3, 4}
Returns: {1, 2, 4 }
这里可以得到的幸运数字有4和7.
7有两个子集{3, 4} 和 {1, 2, 4}. 选择字典排序小的{1,2,4}
1)
{12, 43, 29}
Returns: { }
没有幸运号码
2)
{4, 7}
Returns: {7 }
3)
{41, 2, 28, 44, 7, 42, 21}
Returns: {7, 28, 42 }
4)
{15, 10, 28, 3, 13, 27, 7}
Returns: {7, 15, 27, 28 }
5)
{18, 45, 6}
Returns: { }
6)
{34, 20, 26, 28, 33, 23, 44, 40, 25, 10, 36, 14, 7, 29, 21, 27, 17, 13, 19, 24, 32, 41, 31}
Returns: {7, 10, 13, 14, 17, 19, 20, 21, 23, 24, 25, 26, 27, 28, 29, 31, 32, 34, 44 }
问题3:
数字4和7是幸运数字,所其他数字是非幸运数字。第3级幸运号码是一个至少可以被一个幸运数字整除的10进制正整数。John 和 Brus 已经写出了a到b之间的所有第3幸运号码,含a和b。他们想统计这些幸运数号码每位数字【0--9】的出现次数。返回一个包含10个元素的long[] 数组,第i-th个元素表示数字i出现的总次数。0<=i<=9。
定义类如下:实现find方法。
public class TheLuckyNumbersLevelThree{
public int[] find(int[] numbers){}
}
约束条件:
1<=a<=10^16
1<=b<=10^16
例:
0)
1
10
Returns: {0, 0, 0, 0, 1, 0, 0, 1, 1, 0 }
第3级幸运号码为- 4, 7, 8.
1)
78
79
Returns: {0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
没有
2)
1
47
Returns: {2, 4, 7, 3, 7, 1, 2, 1, 2, 0 }
3)
21
91
Returns: {4, 2, 7, 4, 9, 3, 7, 5, 7, 2 }