老師小學時就知道判斷一自然數n是否為9的倍數就看它的數字和是否為除9餘0,老師的老師有教,連找質數的篩法小學就教了。Leetcode 258 Add Digits C/C++/python解數字相加,解答可以簡單到只有一行
return (num==0)?0:(num-1)%9+1;
不過先用遞迴解答,老師的遞迴解答雖是多項式時間也能在0 ms完成,再用點簡易數論Number Theory,O(1)的答案就呼之欲出了。C/C++的解答不論演算全是0ms完成,而相同架構的O(1)的答案python卻要35ms,非高階套件應用畢竟不是python的強項(而python的高階應用套件的核心往往是用C/C++/Fortran加上平行化函式庫,甚至是cuda C撰寫的),要玩演算法的實在要好好考慮。
沒有留言:
張貼留言