先說明一下,我遇到的第二題跟大家先前討論的第二題題目不同,不過最近演算法挺火,也就放上來,大家一起討論討論,而且我覺得有道這次比賽非常好,我看了下topcode平台,大家平時也可以進這個平台練習一下演算法,不過。。。。有道的翻譯還真有待提高了
宣告一下,我演算法沒有學過,只是想到了解決的方法,當時理解題目花了我很多時間,不知道是我太笨還是題目真有問題,呵呵。廢話不說,上題目:
problem statement
乙個二進位制序列由下面的偽**生成:
string a = "0"
while (a
的長度小於等於
n) 建立乙個和
a一樣長度的字串
b for i=0,1,...length(a)-1
if (i
是完全平方數
) b[i] = 1-a[i]
else
b[i] = a[i]
令a = a + b (即將b
拼接在a
後面)
end while
return a
請注意,在上面的偽**中,
a[i]
和b[i]
分別表示字串a和
b中下標為
i的字元(下標編號從
0開始)。對
"完全平方數
"的定義是,對於整數
i,存在整數
j,使得
i= j *j
,則稱i
為完全平方數。
下面具體說明序列生成的過程:如果
n=7,則在每一輪迭代中,
a的取值依次為:
0, 01, 0110, 01101010
,所以最終產生的二進位制序列就是
0,1,1,0,1,0,1,0
請返回上述序列中下標為
n的數字(該序列的下標從
0開始)
definition
class:
binarysequence
method:
getvalue
parameters:
int
returns:
int
method signature:
int getvalue(int n)
(be sure your method is public)
constraints
- n
的取值大於等於
0,小於等於
2,000,000,000
examples
0) 7
returns: 0
原因參見題目描述。
1) 2
returns: 1
2) 8
returns: 1
這一次,生成的序列為
0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0.
3) 11
returns: 0
4) 10
returns: 1
5)15
returns: 0
1public
class
binarysequence219
else
2023}24
a =a +
string.join(
"", b);
2526}27
28return
int.parse(a[n].tostring());
29}30
31public
bool
issquare(
intn)
3241}42
43return
result;
44}45
}單純為了解決方法做的,效率談不上,效能也不好,不過剛想到乙個有趣的解法,準備下午的時候抽空寫寫,哈哈
寫演算法純粹是為了玩,不是要證明自己如何,大家也不必說演算法到底有用無用,有用無用都是根據自己的工作來看的,不過業餘時間玩玩演算法,真的很好。
我的有道難題演算法 雙倍超立方數
constraints n取值範圍為1到1,000,000,000 含 examples 0 1returns 0 1 1729 returns 1 1729 1 3 12 3 1729 9 3 10 3 2 475574 returns 27 因為題中大量使用3次方計算,這裡我們也可以減少重複計算...
網易有道的上機第二道題目
原題貌似是這樣的,1 9這個數,每個數用兩遍,組成3個六位數,當這3個六位數同時是完全平方數時,輸出這3個六位數 六位數無關順序 a b,c a,c,b 解析 先找出是完全平方的六位數,先找到滿足要求的三位數 平方下就六位數了 即在這個區間找合適的組合 317,999 原因是316 316 9985...
我在力扣作的第二道題
給你兩個 非空 的鍊錶,表示兩個非負的整數。它們每位數字都是按照 逆序 的方式儲存的,並且每個節點只能儲存 一位 數字。請你將兩個數相加,並以相同形式返回乙個表示和的鍊錶。你可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。輸出 7,0,8 解釋 342 465 807.示例 2 輸入 l1 ...