天天看點

pta構造回文數C語言,【LeetCode】 #9:回文數 C語言

最近打算練習寫代碼的能力,是以從簡單題開始做。

大部分還是用C語言來解決。

@

題目

判斷一個整數是否是回文數。回文數是指正序(從左向右)和倒序(從右向左)讀都是一樣的整數。

示例 1:

輸入: 121

輸出: true

示例 2:

輸入: -121

輸出: false

解釋: 從左向右讀, 為 -121 。 從右向左讀, 為 121- 。是以它不是一個回文數。

示例 3:

輸入: 10

輸出: false

解釋: 從右向左讀, 為 01 。是以它不是一個回文數。

思路

這與#7很相似,但是需要考慮方法的效率問題。

初步想法

初步的想法就是用一個while循環,在循環裡面解決取餘和倒序相加的工作。之後再用一個循環進行首尾比較。

具體代碼如下:

bool isPalindrome(int x) {

if (x < 0 || x%10 == 0 && x != 0) return 0;

if (x / 10 == 0) return 1;

int a[20] = { 0 }, n = 0;

while (x) {

a[n] = x % 10;

x = x / 10;

n++;

}

for (int i = 0; i < n / 2; i++){

if (a[i] != a[n-1-i]) return 0;

}

return 1;

}

需要注意的是,我們可以預先對資料進行判斷,比如負數一定不是回文數,數字末尾為0的非0數也一定不是回文數,隻有一位的數字一定是回文數。、

進一步想法

在看了官方題解後,提到了将數字本身反轉,然後将反轉後的數字與原始數字進行比較,如果它們是相同的,那麼這個數字就是回文。

bool isPalindrome(int x) {

if (x < 0 || x%10 == 0 && x != 0) return 0;

if (x / 10 == 0) return 1;

int rev = 0;

while (x > rev) {

rev = x % 10 + rev * 10;

x = x / 10;

}

return x == rev || x == rev / 10;

}

需要注意的是由于預先不知道x是奇數位還是偶數位,是以最後的比較條件裡出現了 x==rev/10.

最後想法

題目中也有提到将數字轉換為字元串,我一開始想到用itoa,但是leetcode不支援這個函數,是以選用了sprintf來進行轉換。

bool isPalindrome(int x) {

if (x < 0 || x % 10 == 0 && x != 0) return 0;

char a[20] = { 0 };

sprintf_s(a,"%d",x);

for (int i = 0; i< (strlen(a) / 2); i++){

if (a[i] != a[strlen(a) - 1 - i]) return 0;

}

return 1;

}

參考連結

總結

在簡單問題上,不僅要注意到問題的解決,還要注重方法的效率問題,嘗試用多種方法來解決。

leetcode 1&period;回文數-(easy)

2019.7.11leetcode刷題 難度 easy 題目名稱 回文數 題目摘要 判斷一個整數是否是回文數.回文數是指正序(從左向右)和倒序(從右向左)讀都是一樣的整數. 思路 一些一定不為回文數的 ...

LeetCode 5回文數

判斷一個整數是否是回文數.回文數是指正序(從左向右)和倒序(從右向左)讀都是一樣的整數. 示例 1: 輸入: 121 輸出: true 示例 2: 輸入: -121 輸出: false 解釋: 從左向 ...

leetcode isPalindrome &lpar;回文數判斷&rpar;

回文很簡單,就是正着讀和反着讀一樣,要判斷一個數是否為回文數隻需要判斷正反兩個是不是相等即可. 再往深了想一下,隻需要判斷從中間分開的兩個數一個正讀,一個反讀相等即可. 代碼: class Solut ...

Java實作 LeetCode 9 回文數

9. 回文數 判斷一個整數是否是回文數.回文數是指正序(從左向右)和倒序(從右向左)讀都是一樣的整數. 示例 1: 輸入: 121 輸出: true 示例 2: 輸入: -121 輸出: false ...

&lbrack;LeetCode&rsqb; 9&period; 回文數

題目連結:https://leetcode-cn.com/problems/palindrome-number/ 題目描述: 判斷一個整數是否是回文數.回文數是指正序(從左向右)和倒序(從右向左)讀都 ...

leetcode記錄-回文數

判斷一個整數是否是回文數.回文數是指正序(從左向右)和倒序(從右向左)讀都是一樣的整數. 示例 1: 輸入: 121 輸出: true 示例 2: 輸入: -121 輸出: false 解釋: 從左向 ...

Leetcode 9 回文數Palindrome Number

判斷一個整數是否是回文數.回文數是指正序(從左向右)和倒序(從右向左)讀都是一樣的整數. 示例 1: 輸入: 121 輸出: true 示例 2: 輸入: -121 輸出: false 解釋: 從左向 ...

leetcode 9 Palindrome Number 回文數

Determine whether an integer is a palindrome. Do this without extra space. click to show spoilers. S ...

&lbrack;LeetCode&rsqb; Prime Palindrome 質數回文數

Find the smallest prime palindrome greater than or equal to N. Recall that a number is prime if it's ...

随機推薦

2016 版 Laravel 系列入門教程(五)【最适合中國人的 Laravel 教程】

本教程示例代碼見: https://github.com/johnlui/Learn-Laravel-5 在任何地方卡住,最快的辦法就是去看示例代碼. 本文是本系列教程的完結篇,我們将一起給 Arti ...

Mac下finder中無法關閉的小條

就是這個惡心的小東西,根本無法關閉.其實就是在finder中無意中輸入了中文導緻的(不是按Alt+F , 就是打開finder然後輸入中文) 可以通過繼續輸入中文然後按esc退出.也可以用下面的設定盡 ...

javascript面向對象執行個體

非私有屬性 function Student(name, gender, age, grade, teacher){ this.name = name; this.gender = gender; t ...

erl0004 - ets 安全周遊

safe_fixtable(Tab, true|false) -> true        Types:              Tab = tid() | atom() 鎖定set,bag和 ...

HDU 5656 CA Loves GCD (數論DP)

CA Loves GCD 題目連結: http://acm.hust.edu.cn/vjudge/contest/123316#problem/B Description CA is a fine c ...

給Sublime Text 2安裝CTags插件

以Windows作業系統為例介紹安裝過程: 安裝ctags應用程式. 到CTags的官方網站下載下傳最新版本,解壓後将ctags.exe檔案放到系統的搜尋路徑中. 安裝Sublime Text 2的Pac ...

MAC apache伺服器搭建

一.啟動原本伺服器 首先打開“終端(terminal)”,輸入 sudo apachectl -v,(可能需要輸入機器秘密).如下顯示Apache的版本: 可以輸入啟動指令進行啟動: sudo apa ...

滑動視窗的最大值 &&num;183&semi; sliding-window-maximum

[抄題]: Given an array nums, there is a sliding window of size k which is moving from the very left of ...

android4&period;2 高用zing拍照後,傳回其它頁面操作時,主線程關掉或程式退出的問題解決

産生錯誤的代碼: @Override protected void onCreate(Bundle savedInstanceState) { StrictMode.setThreadPolicy(n ...

Linux Socket - UDP連結包

LINUX UDP SOCKET 01 UDP号綁定會報錯嗎? 會的,提示Address is using,本地的沒有差別 UDP不需要發起連結,不知道是不是連接配接成功 client的IP位址和端口号不 ...