版权声明:本文自由转载,转载请注明出处。 https://blog.csdn.net/qq_38071429/article/details/84640170
没做出来呜呜呜!乍一看觉得很简单,结果真正理解题目的意思后就手足无措了,大都时候看完题解都要感叹一下当初我怎么没有想象到这种算法呢哎,不过也有的时候再坚持一下下就解出来了,前者是学习的过程,后者才是真的进步!
public int GetUglyNumber_Solution(int index) {
if(index<=4) return index;
int array[] = new int[index];
/* switch (index) {
case 1:
return 1;
case 2:
return 2;
case 3:
return 3;
case 4:
return 4;
case 5:
return 5;
}*/
array[0] = 1;
array[1] = 2;
array[2] = 3;
array[3] = 4;
//通过循环将丑数依次存入数组,返回数组最后一个数
for (int i = 4; i < index; i++) {
int min = 0;
int min2 = 0, min3 = 0, min5 = 0;
int temp = 0;
//数组中的丑数必然是递增的,数组中的丑数*2、*3或者*5后得到的必定也是丑数
for (int j = 0; j < i; j++) {
// *2 找到比当前数组中最后一个丑数(数组中最大的数)大的数就跳出循环 用min2存储
temp = array[j] * 2;
if (temp > array[i - 1]) {
min2 = temp;
break;
}
}
for (int j = 0; j < i; j++) {
// *3
temp = array[j] * 3;
if (temp > array[i - 1]) {
min3 = temp;
break;
}
}
for (int j = 0; j < i; j++) {
// *5
temp = array[j] * 5;
if (temp > array[i - 1]) {
min5 = temp;
break;
}
}
// 比较得出最小的丑数添加到丑数数组 这样得到的数组必然依旧是升序的
min = min2 > min3 ? (min3 > min5 ? min5 : min3) : (min2 > min5 ? min5 : min2);
array[i] = min;
}
return array[index - 1];
}