package Second; /** * 题目: * 把只包含质因子2、3和5的数称作丑数(Ugly Number)。 * 例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。 */ public class P240_GetUglyNumber { public int GetUglyNumber(int index){ if (index <= 0) { return -1; } //数组用来存放丑数 int[] UglyArray = new int[index]; UglyArray[0] = 1; int multiply2 = 0; int multiply3 = 0; int multiply5 = 0; for (int i = 1; i < index; i++) { //寻找第i个丑数 int minNumber = Min(UglyArray[multiply2] * 2, UglyArray[multiply3] * 3, UglyArray[multiply5] * 5); //丑数放入数组 UglyArray[i] = minNumber; //判断丑数是根据multiply2、multiply3、multiply5中哪一个数得到的,然后将相应的数加1 while (UglyArray[multiply2] * 2 == minNumber) { multiply2++; } while (UglyArray[multiply3] * 3 == minNumber) { multiply3++; } while (UglyArray[multiply5] * 5 == minNumber) { multiply5++; } } int result = UglyArray[index - 1]; return result; } public int Min(int num2, int num3, int num5) { int temp = num2 < num3 ? num2 : num3; int result = temp < num5 ? temp : num5; return result; } public static void main(String[] args) { int index = 3; P240_GetUglyNumber test = new P240_GetUglyNumber(); int result = test.GetUglyNumber(index); System.out.print(result); } }
剑指offer:丑数(java)
最新推荐文章于 2021-10-28 21:05:57 发布