码迷,mamicode.com
首页 > 其他好文 > 详细

Ugly Number | & || & |||

时间:2016-07-06 09:54:34      阅读:197      评论:0      收藏:0      [点我收藏+]

标签:

Ugly Number

Write a program to check whether a given number is an ugly number`.

Ugly numbers are positive numbers whose prime factors only include 235. For example, 68 are ugly while 14 is not ugly since it includes another prime factor 7.

 Notice

Note that 1 is typically treated as an ugly number.

Example

Given num = 8 return true
Given num = 14 return false

分析:

根据ugly number的定义,不难想出答案。

 1 public class Solution {
 2     /**
 3      * @param num an integer
 4      * @return true if num is an ugly number or false
 5      */
 6     public boolean isUgly(int num) {
 7         if (num <= 0) return false;
 8         
 9         while(num % 5 == 0) {
10             num = num / 5;
11         }
12         
13         while(num % 3 == 0) {
14             num = num / 3;
15         }
16         
17         while(num % 2 == 0) {
18             num = num / 2;
19         }
20         
21         return num == 1;
22     }
23 }

Ugly Number II

Ugly number is a number that only have factors 23 and 5.

Design an algorithm to find the nth ugly number. The first 10 ugly numbers are 1, 2, 3, 4, 5, 6, 8, 9, 10, 12...

 Notice

Note that 1 is typically treated as an ugly number.

Example

If n=9, return 10.

分析:

 1 class Solution {
 2     /**
 3      * @param k: The number k.
 4      * @return: The kth prime number as description.
 5      */
 6     public int nthUglyNumber(int k) {
 7         if (k < 1)
 8             return 0;
 9         int i2 = 0, i3 = 0, i5 = 0;
10         int[] arr = new int[k];
11         arr[0] = 1;
12 
13         int index = 1;
14         while (index < arr.length) {
15             int v2 = arr[i2] * 2;
16             int v3 = arr[i3] * 3;
17             int v5 = arr[i5] * 5;
18 
19             int min = min(v2, v3, v5);
20             arr[index] = min;
21             
22             // cannot use if-else if-else structure because in some cases, v2, v3 v5 can be the same.
23             if (min == v2) {
24                 i2++;
25             }
26             if (min == v3) {
27                 i3++;
28             }
29             if (min == v5) {
30                 i5++;
31             }
32             index++;
33         }
34         return arr[arr.length - 1];
35     }
36 
37     int min(int m1, int m2, int m3) {
38         return Math.min(m1, Math.min(m2, m3));
39     }
40     
41 
42 };

Super Ugly Number

Write a program to find the nth super ugly number.

Super ugly numbers are positive numbers whose all prime factors are in the given prime list primes of size k. For example,[1, 2, 4, 7, 8, 13, 14, 16, 19, 26, 28, 32] is the sequence of the first 12 super ugly numbers given primes = [2, 7, 13, 19] of size 4.

 Notice
  • 1 is a super ugly number for any given primes.
  • The given numbers in primes are in ascending order.
  • 0 < k ≤ 100, 0 < n ≤ 10^6, 0 < primes[i] < 1000
Example

Given n = 6, primes = [2, 7, 13, 19] return 13

分析:

原理同上,这次只是改成了数组,而不是3个数。

 1 public class Solution {
 2     /**
 3      * @param n a positive integer
 4      * @param primes the given prime list
 5      * @return the nth super ugly number
 6      */
 7 
 8     public int nthSuperUglyNumber(int k, int[] primes) {
 9         if (k < 1)
10             return 0;
11         int[] indexes = new int[primes.length];
12         int[] values = new int[primes.length];
13         int[] arr = new int[k];
14         arr[0] = 1;
15 
16         int index = 1;
17         while (index < arr.length) {
18             for (int i = 0; i < indexes.length; i++) {
19                 values[i] = primes[i] * arr[indexes[i]];
20             }
21 
22             int min = getMin(values);
23             arr[index] = min;
24 
25             for (int i = 0; i < values.length; i++) {
26                 if (values[i] == min) {
27                     indexes[i]++;
28                 }
29             }
30             index++;
31         }
32         return arr[arr.length - 1];
33     }
34 
35     public int getMin(int[] arr) {
36         int min = arr[0];
37         for (int k : arr) {
38             min = Math.min(min, k);
39         }
40         return min;
41     }
42 }

 

Ugly Number | & || & |||

标签:

原文地址:http://www.cnblogs.com/beiyeqingteng/p/5645587.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!