如何刪除數字中的某個數字,以便獲得的數字最小?如何刪除數字中的某個數字,以便獲得的數字最小?
具體而言,我想要寫int remove_digits(int large, int num_digits_to_remove)
使得一個函數:
- 任何
num_digits_to_remove
數字是從large
除去雖然從它的字符串表示除去字符 - 返回的號碼有可能的最低值從步驟1中刪除數字
例如,從69469813
中刪除4位數將給出4613
我寧願用C寫的答案
如何刪除數字中的某個數字,以便獲得的數字最小?如何刪除數字中的某個數字,以便獲得的數字最小?
具體而言,我想要寫int remove_digits(int large, int num_digits_to_remove)
使得一個函數:
num_digits_to_remove
數字是從large
除去雖然從它的字符串表示除去字符例如,從69469813
中刪除4位數將給出4613
我寧願用C寫的答案
理念:
char number[] = "69469813";
char digits[ARRAY_SIZE(number)];
size_t i;
// sort digits; complexity O(n * log n);
sort_digits(digits, number); // -> digits becomes "99866431"
for (i = 0; i < number_of_digits_to_be_removed; ++i) {
size_t j;
for (j = 0; j < ARRAY_SIZE(number); ++j) {
if (number[j] == digits[i]) {
number[j] = 'X'; // invalidate it
break;
}
}
}
for (i = 0; i < ARRAY_SIZE(number); ++i)
if (number[i] != 'X')
printf("%c", number[i]);
整件事具有複雜度O(N * M);
我不知道C,但這裏是我會怎麼做它在Java中:
String original = "69469813";
String result = "";
int numNeedToBeTaken = 4;
int numLeft = original.length() - numNeedToBeTaken;
while(result.length() < numLeft)
{
String temp = original.substring(0,original.length()-numNeedToBeTaken+1);
int smallest= 9;
int index = 0;
for(int i = 0; i<temp.length(); i++)
{
int number = Integer.parseInt(Character.toString(temp.charAt(i)));
if(number < smallest)
{
smallest = number;
index = i+1;
}
}
numNeedToBeTaken--;
result = result.concat(String.valueOf(smallest));
original = original.substring(index);
}
Log.d("debug","result: "+result); //tested to work with your example, returns 4613
這個轉換到C應該是很容易的,我只用一些基本的操作。
基本思想是,如果只能刪除一位數字,則需要刪除第一位數字(以最高有效位數開頭),後面跟着一個較小的數字。
例如,如果你的號碼是123432,你要刪除的4(因爲它是緊接着3),導致12332.
你再重複這個過程儘可能多的數字,只要你想刪除:
char *num = "69469813";
char *buf = malloc(strlen(num)+1);
size_t to_remove = 4;
while (to_remove --> 0) {
char *src = num;
char *dst = buf;
while (*src < *(src+1)) { *dst++ = *src++; } // Advance until the next digit is less than the current digit
src++; // Skip it
while (*dst++ = *src++); // Copy the rest
strcpy(num, buf);
}
printf("%s\n", num); // Prints 4613
請注意,ensc的解決方案不適用於,例如,319刪除一個。在這種情況下,你想刪除3(如我的解決方案中所做的),而不是9。 – rockhyrax
研究模數運算符。 – enhzflep
歡迎來到StackOverflow!我編輯了你的問題,試圖更清楚你的算法在做什麼。我說得對嗎,還是你想做一些不同的事情? – Kevin
那麼,你想刪除一個數字中最大的數字? –