思路:若百位上數字為0,百位上可能出現1的次數由更高位決定;若百位上數字為1,百位上可能出現1的次數不僅受更高位影響還受低位影響;若百位上數字大於1,則百位上出現1的情況僅由更高位決定。
舉例:
個位1出現的次數:round*1+1
(每次迴圈1出現一次,0-9迴圈了53次,第54次迴圈為0-4)
十位1出現的次數:round*10 + 10(每次迴圈1出現10次,0-9迴圈了round=5次,第六次迴圈為0-3)
其他高位迴圈同理。
故有:
534 = (個位1出現次數)+(十位1出現次數)+(百位1出現次數)
=(53
*1+1) +(5
*10+10)+(0
*100+100) = 214
530 = (53
*1) +(5
*10+10)+(0
*100+100) = 213
504 = (50
*1+1)+(5
*10) +(0
*100+100) = 201
514 = (51
*1+1)+(5
*10+4+1)+(0
*100+100) = 207
10 = (1
*1) + (0
*10+0+1) = 2
**如下:
public
long countone(int n)
return
count;
}
醜數是只包含因子2、3和5的數,求從小到大的第n個醜數。例如6、8都是醜數,但14不是,因為它包含質因子7。 習慣上我們把1當做是第乙個醜數。求按從小到大的順序的第n個醜數。
思路一:
醜數判斷:
while (number % 2 == 0) number /= 2;
while (number % 3 == 0) number /= 3;
while (number % 5 == 0) number /= 5;
return
number == 1 ? true : false;
}然後依次輸入每個數就可以獲得n個醜數。但這樣計算太多,即使乙個數不是醜數,也要進行多次計算。
思路二:空間換時間,建立陣列儲存已經找到的醜數。後序的醜數都是min乘2或3或5得到的。
初始化陣列只: ;min = 1,後序 乘2或3或5,之後比較取最小值:2,3,5
public int getuglynumber_solution(int index)
return arr[index - 1];
}
劍指offer演算法
動態規劃 題目描述 hz偶爾會拿些專業問題來忽悠那些非計算機專業的同學。今天測試組開完會後,他又發話了 在古老的一維模式識別中,常常需要計算連續子向量的最大和,當向量全為正數的時候,問題很好解決。但是,如果向量中包含負數,是否應該包含某個負數,並期望旁邊的正數會彌補它呢?例如 連續子向量的最大和為8...
劍指offer 排序演算法
常用排序演算法自主手寫 1 氣泡排序 時間o n 2 空間o 1 穩定,資料有序效果越好 void bubblesort int a,int n flag 1說明該趟不是全部都有序,需要繼續比較 flag 0說明沒有進行互換,陣列已經有序了,沒有必要繼續比較,直接結束 2 選擇排序 時間o n 2 ...
《劍指Offer》 排序演算法
簡單排序 直接插入 直接選擇 冒泡 o n2 優化排序 希爾排序 堆排序 快速排序 o n log n 歸併排序。要能夠從時間複雜度 空間複雜度比較優缺點。陣列中有乙個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入乙個長度為9的陣列。由於數字2在陣列 現了5次,超過陣列長度的一半,因此輸...