1. 程式人生 > >728. Self Dividing Numbers。

728. Self Dividing Numbers。

A self-dividing number is a number that is divisible by every digit it contains.

For example, 128 is a self-dividing number because 128 % 1 == 0, 128 % 2 == 0, and 128 % 8 == 0.

Also, a self-dividing number is not allowed to contain the digit zero.

Given a lower and upper number bound, output a list of every possible self dividing number, including the bounds if possible.

Example 1:

Input:
left = 1, right = 22
Output: [1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 15, 22]

依題所示,如果一個數字可以整除它所有位上的數字,那麼就稱為self-dividing number,我們需要設計一個演算法來求出指定範圍內滿足的所有數字。

題目並不難,只需要不斷使用當前數字除以不同位上的數字即可,但是需要注意的是self-dividing number中不含有0的,像10這種的肯定不行了,因為number中一旦包含0就無法讓number本身除以0這一位了。

那麼問題就轉換成如果判斷數字中是否含0,對於像10、20、100、300 這種的可以直接讓其本身對10取模,觀察餘數是否為0即可,像101、203這種的,讓其除以10,然後再取模運算判斷。

那麼很快便能寫出如下解:

class Solution {
public:
    vector<int> selfDividingNumbers(int left, int right) {
        int temp = left;
        vector<int> result;
        for(int num=left;num<=right;num++) {// 在指定範圍內迴圈
            temp = num;
            if(!(temp%10)) { // 判斷是否屬於10、20、300型別
                continue
; } while(temp && num%(temp%10) == 0) {// 如果當前位數滿足條件就繼續試探下一位 temp /= 10; if(temp%10==0){ // 判斷是否屬於101、203這種的 break; } } if(temp == 0) { result.push_back(num); } } return result; } };

這種是可以AC的,但是可以看到其中有不少冗餘的程式碼,那麼就需要優化一下減少冗餘的程式碼。可以看出其中temp%10的取模運算重複了,那就可以使用一個mod變數直接儲存。而100和101這種型別的可以統一放在一起判斷。

程式碼如下:

class Solution {
public:
    vector<int> selfDividingNumbers(int left, int right) {
        int temp = left;
        int mod;
        vector<int> result;
        for(int num=left;num<=right;num++) {// 在指定範圍內迴圈
            temp = num;

            while(temp) {
                mod = temp%10; // 求出此時的餘數
                if(mod==0 || num%mod!=0)// 如果此時餘數等於0說明是10的倍數則退出,如果此時不滿足條件也退出
                    break;
                temp /= 10;
            }

            if(temp == 0) {
                result.push_back(num);
            }
        }
        return result;
    }
};

相關推薦

728. Self Dividing Numbers

A self-dividing number is a number that is divisible by every digit it contains. For example, 128 is a self-dividing number becaus

728. Self Dividing Numbers 自分數

each ati app 邊界 right output 輸出 href 允許 A self-dividing number is a number that is divisible by every digit it contains. For example, 1

LeetCode 728. Self Dividing Numbers

true aries ole turn git ref ever self inpu A self-dividing number is a number that is divisible by every digit it contains. For exampl

[LeetCode] 728. Self Dividing Numbers

return contains use == true left 不出 int ++ A self-dividing number is a number that is divisible by every digit it contains. For example,

leetcode 728:Self Dividing Numbers with Python

class Solution: def selfDividingNumbers(self, left, right): """ :type left: int :type right: int :rt

728. Self Dividing Numbers [for ...else]

  A self-dividing number is a number that is divisible by every digit it contains. For example, 128 is a self-dividing number bec

Leetcode——728. Self Dividing Numbers

題目連結 題面: A self-dividing number is a number that is divisible by every digit it contains. For example, 128 is a self-dividing nu

#Leetcode# 728. Self Dividing Numbers

each bounds highlight right self ack ext numbers family https://leetcode.com/problems/self-dividing-numbers/ A self-dividing number i

[LeetCode] Self Dividing Numbers

i++ nta left vector because span || digi eve A self-dividing number is a number that is divisible by every digit it contains. For example

[LeetCode] Self Dividing Numbers 自整除數字

bounds 整除 leetcode dig ins dividing num per ssi A self-dividing number is a number that is divisible by every digit it contains. For

Leetcode728.Self Dividing Numbers自除數

自除數 是指可以被它包含的每一位數除盡的數。 例如,128 是一個自除數,因為 128 % 1 == 0,128 % 2 == 0,128 % 8 == 0。 還有,自除數不允許包含 0 。 給定上邊界和下邊界數字,輸出一個列表,列表的元素是邊界(含邊界)內所有的

Self Dividing Numbers 自除數

自除數 是指可以被它包含的每一位數除盡的數。 例如,128 是一個自除數,因為 128 % 1 == 0,128 % 2 == 0,128 % 8 == 0。 還有,自除數不允許包含 0 。 給定上邊界和下邊界數字,輸出一個列表,列表的元素是邊界(含邊界)內所有的自除數

Self Dividing Numbers 自除數

自除數 是指可以被它包含的每一位數除盡的數。 例如,128 是一個自除數,因為 128 % 1 == 0,128 % 2 == 0,128 % 8 == 0。 還有,自除數不允許包含 0 。 給定上邊界和下邊界數字,輸出一個列表,列表的元素是邊界(含邊界)內所有的自除

vue.js中的事件修飾符.self的用法

.self可以理解為跳過冒泡事件和捕獲事件,只有直接作用在該元素上的事件才可以執行。 程式碼如下: <!DOCTYPE html> <html lang="en"> &l

315. Count of Smaller Numbers After Self

turn amp for tsm tail index you code merge p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "Helvetica Neue"; color: #323333 } p.p2 {

#452 Div2 Problem C Dividing the numbers ( 思維 || 構造 )

tin ros family 過程 clas num microsoft splay 選擇 題意 : 將從 1 ~ n 的數分成兩組,要求兩組和的差值盡可能小,並輸出其中一組的具體選數情況 分析 : 如果將這 n 個數從大到小四個一組來進行選擇的話那麽差值就為 0 ,然

Django專案執行時出現self.status.split(' ',1)[0], self.bytes_sent,ConnectionAbortedError: [WinError 10053] 你的主機中的軟體中止了一個已建立的連線

1 [02/Nov/2018 09:46:51] "GET /new_industry/category HTTP/1.1" 200 2891792 2 Traceback (most recent call last): 3 File "C:\Program Files\Python36\l

CF .Beautiful numbers 區間有多少個數字是可以被它的每一位非零位整除(數位DP)

  題意:數字滿足的條件是該數字可以被它的每一位非零位整除。   分析:大概的思路我是可以想到的 , 但沒有想到原來可以這樣極限的化簡 , 在數位dp 的道路上還很長呀 ;  我們都知道數位dp 的套路 , 核心的部分就是找到判斷這個數的滿足條件的方法 , 如果找到了那這

CCF NOI1052. Self-Numbers

時間限制: 1000 ms  空間限制: 262144 KB  具體限制   題目描述 在1949年印度數學家D. R. Daprekar發現了一類稱作Self-Numbers的數。對於每一個正整數n,我們定義d(n)為n加上它每一位數字的和。例如,d(75)=75+7+