【一次過】Lintcode 1028. 旋轉的數位
阿新 • • 發佈:2018-12-12
X是一個好數當且僅當單獨旋轉每一個數位180度之後,能夠得到一個合法的不同於X的數。每一個數位必須被旋轉 - 我們不能選擇不管它。
如果每一個數位在旋轉之後仍然是一個數位,那麼這個數字是合法的。0,1和8旋轉保持不變; 2和5旋轉後互相變換; 6和9旋轉後互相變換,其餘數字旋轉後不會變成任何數字所以是不合法的。
現在給定一個正數 N
,多少1
到 N
之間的數X是好的?
樣例
樣例:
輸入: 10
輸出: 4
解釋:
在[1, 10]之記憶體在4個好數:2, 5, 6, 9.
注意1和10不是好數,因為它們在旋轉之後沒有變化。
注意事項
- N 會在範圍
[1, 10000]
內。
解題思路:
按照題目要求直接寫即可,如下:
public class Solution { /** * @param N: a positive number * @return: how many numbers X from 1 to N are good */ public int rotatedDigits(int N) { // write your code here int nums = 0; for(int i=1 ; i<=N ; i++){ if(isGoodDigit(i)) nums++; } return nums; } private boolean isGoodDigit(Integer n){ char[] cc = n.toString().toCharArray(); int sameTimes = 0; //計算此數字中,0,1,8出現的次數 for(char c : cc){ if(c=='0' || c=='1' || c=='8'){ sameTimes++; }else if(c=='2' || c=='5' || c=='6' || c=='9'){ continue; }else{ return false; } } if(sameTimes == cc.length)//若旋轉後沒有變化(0,1,8出現的次數==此數的長度),則為false return false; else return true; } }