2016-04-28 127 views
0

這是Leetcode,Counting Bits的第338個問題。我認爲我完成了它。 但是,輸入爲5時,這些代碼會得到運行時錯誤?但爲什麼?爲什麼只有輸入爲5時纔會出現運行時錯誤?

問題是: 給定一個非負整數num。對於範圍0≤i≤num中的每個數字i,計算其二進制表示中的1的數目並將它們作爲數組返回。

class Solution { 
public: 
    vector<int> countBits(int num) { 
     vector<int> binaryone(num+1); 
     binaryone[0]=0; 
     if(0==num) 
      return binaryone; 
     binaryone[1]=1; 
     if(1==num) 
      return binaryone; 
     int w = 1 ; 
     int i = 2; 
     while(i<=num+1) 
     { 
      if(i<(pow(2,w-1)+pow(2,w-2))) 
      { 
       binaryone[i]=binaryone[i-pow(2,w-2)]; 
      } 
      else 
      { 
       if(i<=(pow(2,w)-1)) 
       { 
        binaryone[i]=binaryone[i-pow(2,w-2)]+1; 
       } 
       else 
       { 
        if(i==pow(2,w)) 
         { 
          w++; 
          binaryone[i]=binaryone[i-pow(2,w-2)]; 
         } 
       } 
      } 
      i++; 
     } 
     return binaryone; 
    } 
}; 
+5

這聽起來像你可能需要學習如何使用調試器來逐步執行代碼。使用一個好的調試器,您可以逐行執行您的程序,並查看它與您期望的偏離的位置。如果你打算做任何編程,這是一個重要的工具。進一步閱讀:** [如何調試小程序](http://ericlippert.com/2014/03/05/how-to-debug-small-programs/)** – NathanOliver

+1

你的電腦肯定是醉了。刪除酒精,然後再試一次 –

+2

[不要使用pow()來計算整數功率](http://stackoverflow.com/questions/25678481/why-pown-2-return-24-when-n-5/25678721#25678721 ) – PaulMcKenzie

回答

2

我不認爲這隻會發展到5,但對所有的投入。這是因爲你創造了你的binaryone矢量num+1元素是:

vector<int> binaryone(num+1);

和你的循環while(i<=num+1)正在索引一個過去的結束,零基礎索引,元素給你一個運行時錯誤。如果您有n元素,則指數範圍將從0 to n-1

因此改變你的循環條件: while(i<num+1)

相關問題