319-m-Bulb Switcher
2016-04-20 16:54
260 查看
给定n盏灯,第1步把它们都打开on,然后第i步把每i盏灯都置为相反状态,直到第n步完成,问最后有多少盏灯是亮的on?例如给定8盏灯,第1步全亮,第2步置2、4、6、8为off,第3步置3off,6on 。。。第8步置8为相反状态。
看完题目觉得应该跟数字因数的奇偶个数有关系,于是用笔写了下找了规律,发现如果该数字的因数的个数是2的倍数的话那么最后状态一定是off的,所以就照着思路直直的敲了代码提交,最后超时(在求因数个数的时候用的时暴力法,所以是n方时间度)。无奈网搜了下,发现代码异常简单:求n的最大平方根。刚开始还没理解,想了下原来就是我之前思路的更好的抽象版本,例如n = 8时,8的因数是1、2、4、8,所以肯定是off,而质数肯定也是off因为因数是1和它本身,那么什么数的因数个数是奇数呢?没错,平方数。4=1x4=2x2=4x1,16的因数是1、2、4、8、16,归根到底就是因为平方根的解合二为一只会动开关1次,而其他因数都有配对的另一个因数会动开关2次,所以其实题目求的就是从1到n共有多少个平方数,那就是1、4、9、16。。。等等咯。
贴上超时的代码做个记录,跟系统开方函数比对过,结果倒是对的但oj会超时,ac的就不贴了,就一个开方函数。
int bulbSwitch(int n) {
int result = 1;
int count = 0;
for (int i = 2; i <= n; i++) {
for (int j = 2; j <= i / 2; j++) {
if (i % j == 0)
count++;
}
count++;
if (count % 2 == 0)
result++;
count = 0;
}
return result;
}
看完题目觉得应该跟数字因数的奇偶个数有关系,于是用笔写了下找了规律,发现如果该数字的因数的个数是2的倍数的话那么最后状态一定是off的,所以就照着思路直直的敲了代码提交,最后超时(在求因数个数的时候用的时暴力法,所以是n方时间度)。无奈网搜了下,发现代码异常简单:求n的最大平方根。刚开始还没理解,想了下原来就是我之前思路的更好的抽象版本,例如n = 8时,8的因数是1、2、4、8,所以肯定是off,而质数肯定也是off因为因数是1和它本身,那么什么数的因数个数是奇数呢?没错,平方数。4=1x4=2x2=4x1,16的因数是1、2、4、8、16,归根到底就是因为平方根的解合二为一只会动开关1次,而其他因数都有配对的另一个因数会动开关2次,所以其实题目求的就是从1到n共有多少个平方数,那就是1、4、9、16。。。等等咯。
贴上超时的代码做个记录,跟系统开方函数比对过,结果倒是对的但oj会超时,ac的就不贴了,就一个开方函数。
int bulbSwitch(int n) {
int result = 1;
int count = 0;
for (int i = 2; i <= n; i++) {
for (int j = 2; j <= i / 2; j++) {
if (i % j == 0)
count++;
}
count++;
if (count % 2 == 0)
result++;
count = 0;
}
return result;
}
相关文章推荐
- leetcode 179 Largest Number
- leetcode 24 Swap Nodes in Pairs
- leetcode 2 Add Two Numbers 方法1
- leetcode 2 Add Two Numbers 方法2
- leetcode----Longest Substring Without Repeating Characters
- [LeetCode]47 Permutations II
- [LeetCode]65 Valid Number
- [LeetCode]123 Best Time to Buy and Sell Stock III
- [LeetCode] String Reorder Distance Apart
- [LeetCode] Sliding Window Maximum
- [LeetCode] Find the k-th Smallest Element in the Union of Two Sorted Arrays
- [LeetCode] Determine If Two Rectangles Overlap
- [LeetCode] A Distance Maximizing Problem
- leetcode_linearList
- leetcode_linearList02
- 021-Merge Two Sorted Lists(合并两个排好序的单链表);leetcode
- LeetCode[Day 1] Two Sum 题解
- LeetCode[Day 2] Median of Two Sorted Arrays 题解
- LeetCode[Day 3] Longest Substring Without... 题解
- LeetCode [Day 4] Add Two Numbers 题解