2012-11-10 29 views
-1

可能重複:
c++ program to find total numbers of integers containing different digits如何找到整數在其中包含了一系列不同的數字

假設我有一個無符號整數,稱之爲低,彼此稱呼它如此高的那高>低。問題是要找到整個範圍內包含不同數字的整數。例如,假設low爲1,high爲10,那麼答案爲10,因爲此範圍內的所有數字都包含不同的數字。如果設置low爲1,high爲12,那麼答案是10,因爲11包含相同的數字。例123,234,4567是有效的數字,但121,2342,4546是無效的數字。我沒有尋找bruteforce算法,if任何人有一個更好的解決方案,然後通常暴力破解的方法,請告訴..

+0

你的意思是分組符號之間有不同的數字?或者你的意思是123,234和4567是否是有效數字? – Rollie

回答

0

我就得出一個算法來確定從0-n的這種數字的數量,那麼你可以簡單地計算(有效號碼的0#高) - (有效數字0-低)。要獲得有效的數字0-n,請查看數字中的數字位數:例如,如果n有5位數字,則每個有效的1,2,3和4位數字都在您的結果集中。因此,對於一個4位數的數字,可以計算該4位數中所有可能的數字組合:1234,1235,1236 ... 5678,5789和6789.然後計算置換數(1234也可以是1243, 1324,1342等)和multiply(#排列)x(前一步中導出的不同序列的數量)。然後你可以得到所有4位數字的答案。對其他每組都做同樣的事情,併爲你的最後一組提出更具體的東西;如果高爲5500,則需要5000-5100之間的有效數字。您可以應用類似的算法,但不是使用所有數字0-9,而是使用9個不同的數字,省略'5'。請注意,所有數字也可以有0,但不是在開頭,所以算法也需要考慮到這一點。

0

只需將您number to a string,然後在其上運行,同時檢查如果給定的字符已經在字符串中已經發生。例如:

#include <string> 

int main() 
{ 
    std::string s = std::to_string(12345); 
    bool occuredCheck[10] = {0}; //automatically fills with zeros. 10 values for the 10 numbers 
    bool isValidNumber = true; 

    for(int i=s.length()-1; i>=0; ++i) 
     if(occuredCheck[s[i] - '0']^true == 0) isValidNumber = false; 
} 

的如果行集的數組進入到零,當發生diggit兩次,看到XOR。 而isValidNumber可以讓你知道它實際上是否是你的有效號碼。 順便說一句:這個例子需要C++ 11的std::to_string

使用這種算法,你可以檢測第一無效號碼,然後用它設置你的範圍。

相關問題