国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

3.你所不知道的go語言控制語句——Leetcode習(xí)題69

這篇具有很好參考價(jià)值的文章主要介紹了3.你所不知道的go語言控制語句——Leetcode習(xí)題69。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

目錄
  • 本篇前瞻
  • Leetcode習(xí)題9
    • 題目描述
    • 代碼編寫
  • 控制結(jié)構(gòu)
    • 順序結(jié)構(gòu)(Sequence)
      • 聲明和賦值
      • 多返回值賦值
      • 運(yùn)算符
        • 算術(shù)運(yùn)算符
        • 位運(yùn)算符
        • 邏輯運(yùn)算
    • 分支結(jié)構(gòu)
      • if 語句
      • switch 語句
        • 邏輯表達(dá)式
        • fallthrough
        • 類型推斷
    • 循環(huán)語句
      • continue
      • break
      • goto
  • Leetcode習(xí)題69
    • 題目描述
    • 題目分析
    • 代碼編寫
  • 本篇小結(jié)
  • 下篇預(yù)告

本篇前瞻

好的,現(xiàn)在你已經(jīng)來到一個(gè)新的小結(jié),在這里你將學(xué)習(xí)到go語言的重要內(nèi)容,習(xí)得go 25個(gè)關(guān)鍵字中的12個(gè):var, const, if, else, switch, case, default, fallthrough, for, break, goto, continue,即在順序結(jié)構(gòu)學(xué)習(xí)var,const,在分支結(jié)構(gòu)中學(xué)習(xí)if, else, switch, case, default, fallthrough,在循環(huán)結(jié)構(gòu)中學(xué)習(xí)for, break, goto, continue。另外你最好注冊一個(gè)Leetcode賬號.

Leetcode習(xí)題9

讓我們再來看下這個(gè)例子,這個(gè)是一個(gè)比較好的例子,里面包含了順序,分支以及循環(huán)的所有控制結(jié)構(gòu)

題目描述

9. 回文數(shù)

給你一個(gè)整數(shù) x ,如果 x 是一個(gè)回文整數(shù),返回 true ;否則,返回 false 。

回文數(shù)是指正序(從左向右)和倒序(從右向左)讀都是一樣的整數(shù)。

代碼編寫

func isPalindrome(x int) bool {
	if (x < 0) { //分支結(jié)構(gòu)
		return false
	}
	x64 := x   //順序結(jié)構(gòu)
	px64 := 0
	for x64 != 0 {  //循環(huán)結(jié)構(gòu)
		px64 = px64*10 + x64%10 // 順序結(jié)構(gòu)
		x64 /= 10
	}
	return px64 == x 
}

你在這個(gè)道題目中能看到所有的控制結(jié)構(gòu):順序結(jié)構(gòu),分支結(jié)構(gòu),循環(huán)機(jī)構(gòu)

控制結(jié)構(gòu)

順序結(jié)構(gòu)(Sequence)

聲明和賦值

在順序結(jié)構(gòu)中聲明和賦值是很重要的

var可以聲明一個(gè)變量,而const則聲明一個(gè)常量

package main

import "fmt"

func main() {
	var i1 int     //聲明變量,默認(rèn)值為0
	var i2 int = 1 //聲明變量,初始化為1
	i3 := 2        //這是最常用的聲明和初始化手段
	fmt.Println(i1, i2, i3)
	i4 := i2 + i3 //使用運(yùn)算表達(dá)式賦值
	i3 *= i4      //使用運(yùn)算表達(dá)式賦值
	fmt.Println(i3, i4)
	const ci1 int = 13 //聲明常量,無法
	fmt.Println(ci1)
	x, y, z := 100, 101, 102 //多返回值
	fmt.Println(x, y, z)     //打印結(jié)果
}

輸出:

0 1 2
6 3
13
100 101 102

這里僅僅舉例了整形int的聲明

多返回值賦值

x,y,z := 0,1,2

go語言允許這樣多返回值賦值賦值方式,再挖個(gè)坑,原因會在介紹函數(shù)時(shí)說明一下。

運(yùn)算符

算術(shù)運(yùn)算符

++ --
自增1 自減1
+= -= *= /= %=
自增 自減 自乘 自除 自模,取余
+ - * / %
加法 減法 乘法 除法 模,取余

注意: 例如如3/2 在整型中是整除即3/2=1,在浮點(diǎn)型是3.0/2.0=1.5,模運(yùn)算智能用于整數(shù)

位運(yùn)算符

<< >> & | ^
左移 右移 亦或
<<= >>= &= |= ^=
自左移 自右移 自與 自或 自亦或

位運(yùn)算符幾乎我們這篇實(shí)用的編程用不到,但是這個(gè)概念也很重要,計(jì)算機(jī)底層事實(shí)上是這樣工作的,這里在挖個(gè)坑,后面會介紹位運(yùn)算的相關(guān)leetcode題目,你會看到它的威力。

邏輯運(yùn)算

&& || == !=
相等 不等于
>= <= > <
大于等于 小于等于 大于 小于

這些會在分支語句中大放異彩。

分支結(jié)構(gòu)

if 語句

if 語句有if,if-else以及if-else if-else結(jié)構(gòu),如下所示:

package main

import "fmt"

func main() {
	var input int
	fmt.Printf("請輸入分?jǐn)?shù):")
	fmt.Scanf("%d", &input)
	if input < 60 { //if
		fmt.Println("1.不合格")
	}

	if input < 60 { //if-else
		fmt.Println("2.不合格")
	} else{
		fmt.Println("2.合格")
	}

	if input < 60 {//if-else if-else
		fmt.Println("3.不合格")
	} else if input < 70 {
		fmt.Println("3.合格")
	} else if input < 85 {
		fmt.Println("3.良好")
	} else  {
		fmt.Println("3.優(yōu)秀")
	}
}

結(jié)果如下:

請輸入分?jǐn)?shù):59
1.不合格
2.不合格
3.不合格

switch 語句

事實(shí)上switch 語句比if語句更為強(qiáng)大,在有多個(gè)分支時(shí)更為符合go語言的風(fēng)格,完整代碼如下:

package main

import "fmt"

func main() {
	var i int
	fmt.Printf("請輸入分?jǐn)?shù):")
	fmt.Scanf("%d\n", &i)
	switch {
	case i < 60: //單個(gè)邏輯表達(dá)式
		fmt.Println("不合格")
	case i < 70:
		fmt.Println("合格")
	case i < 85:
		fmt.Println("良好")
	default:
		fmt.Println("優(yōu)秀")
	}

	var c byte
	fmt.Printf("請輸入等級:")
	fmt.Scanf("%c\n", &c)

	switch c {
	case 'E', 'e': //可以有多個(gè)選擇
		fmt.Println("1.不合格")
	case 'D', 'd':
		fmt.Println("1.基本合格")
	case 'C', 'c':
		fmt.Println("1.合格")
	case 'B', 'b':
		fmt.Println("1.良好")
	case 'A', 'a':
		fmt.Println("1.優(yōu)秀")
	default:
		fmt.Println("1.錯(cuò)誤的輸入")
	}

	switch {
	case c == 'E', c == 'e': //可以有多個(gè)表達(dá)式
		fmt.Println("2.不合格")
	case c == 'D', c == 'd':
		fmt.Println("2.基本合格")
	case c == 'C', c == 'c':
		fmt.Println("2.合格")
	case c == 'B', c == 'b':
		fmt.Println("2.良好")
	case c == 'A', c == 'a':
		fmt.Println("2.優(yōu)秀")
	default:
		fmt.Println("2.錯(cuò)誤的輸入")
	}

	switch {
	case c == 'E':
		fmt.Println("3.不合格")
		fallthrough //fallthrough會執(zhí)行下一個(gè)case區(qū)塊
	case c == 'e':
		fmt.Println("3.真的不合格")
	case c == 'D', c == 'd':
		fmt.Println("3.基本合格")
	case c == 'C', c == 'c':
		fmt.Println("3.合格")
	case c == 'B', c == 'b':
		fmt.Println("3.良好")
	case c == 'A', c == 'a':
		fmt.Println("3.優(yōu)秀")
	default:
		fmt.Println("3.錯(cuò)誤的輸入")
	}

	var in interface{} = i
	switch data := in.(type) { //類型推斷
	case int:
		fmt.Printf("int: %v\n", data)
	case uint:
		fmt.Printf("uint: %v\n", data)
	default:
		fmt.Printf("type: %T\n", data)
	}
}

結(jié)果如下:

請輸入分?jǐn)?shù):90
優(yōu)秀
請輸入等級:E
1.不合格
2.不合格
3.不合格
3.真的不合格
int: 90

邏輯表達(dá)式

注意case可以是單個(gè)或多個(gè)邏輯表達(dá)式

	switch {
	case c == 'E', c == 'e': //可以有多個(gè)表達(dá)式
		fmt.Println("2.不合格")。
	case c == 'D', c == 'd':
		fmt.Println("2.基本合格")
	case c == 'C', c == 'c':
		fmt.Println("2.合格")
	case c == 'B', c == 'b':
		fmt.Println("2.良好")
	case c == 'A', c == 'a':
		fmt.Println("2.優(yōu)秀")
	default:
		fmt.Println("2.錯(cuò)誤的輸入")
	}

fallthrough

fallthrough會執(zhí)行下一個(gè)case區(qū)塊

	switch {
	case c == 'E':
		fmt.Println("3.不合格")
		fallthrough //fallthrough會執(zhí)行下一個(gè)case區(qū)塊
	case c == 'e':
		fmt.Println("3.真的不合格")
	case c == 'D', c == 'd':
		fmt.Println("3.基本合格")
	case c == 'C', c == 'c':
		fmt.Println("3.合格")
	case c == 'B', c == 'b':
		fmt.Println("3.良好")
	case c == 'A', c == 'a':
		fmt.Println("3.優(yōu)秀")
	default:
		fmt.Println("3.錯(cuò)誤的輸入")
	}

類型推斷

這個(gè)是一個(gè)強(qiáng)大的方式,它可以用于推斷go語言的接口的類型,不過現(xiàn)在只能簡單那介紹一下,你可以將interface{}可以表達(dá)任何類型

	var in interface{} = i
	switch data := in.(type) { //類型推斷
	case int:
		fmt.Printf("int: %v\n", data)
	case uint:
		fmt.Printf("uint: %v\n", data)
	default:
		fmt.Printf("type: %T\n", data)
	}

循環(huán)語句

循環(huán)語句只有for

package main

import "fmt"

func main() {
	var input int
	fmt.Printf("請輸入分?jǐn)?shù)(0-5):")
	fmt.Scanf("%d", &input)

	for i := 0; i < 5; i++ { //正常的for
		fmt.Println("loop1:", i)

		if i < 2 {
			continue //跳過本次執(zhí)行
		}
		if i == input {
			fmt.Println("loop1: break") //跳出本層循環(huán)
			break
		}
	}
	i := 0
Loop:
	for i < 5 { //去掉;的for循環(huán)
		fmt.Println("loop2:", i)
		for j := 0; j < 5; j++ {
			if j == input {
				fmt.Println("loop2: break Loop") //跳出Loop標(biāo)記的循環(huán)
				break Loop
			}
			if j == 1 {
				break //跳出本層循環(huán)
			}
		}
		i++
	}
	i = 0
	for ; i < 5; i++ { //空缺一個(gè)元素并帶有;的for循環(huán)
		fmt.Println("loop3:", i)
		for j := 0; j < 5; j++ {
			if j < 2 {
				continue
			}
			if j == input {
				goto Exit //跳出到Exit
			}
		}
	}
	return
Exit:
	fmt.Println("loop3: Exit")
}

結(jié)果如下:

請輸入分?jǐn)?shù)(0-5):1
loop1: 0
loop1: 1
loop1: 2
loop1: 3
loop1: 4
loop2: 0
loop2: break Loop
loop3: 0
loop3: 1
loop3: 2
loop3: 3
loop3: 4

請輸入分?jǐn)?shù)(0-5):2
loop1: 0
loop1: 1
loop1: 2
loop1: break
loop2: 0
loop2: 1
loop2: 2
loop2: 3
loop2: 4
loop3: 0
loop3: Exit

continue

跳過本次循環(huán)

break

沒有加標(biāo)簽的就是跳過本層循環(huán)

加標(biāo)簽的就是跳過被標(biāo)簽標(biāo)記的循環(huán)

goto

跳到被標(biāo)簽標(biāo)記的循環(huán),使用goto在處理一些同意的錯(cuò)誤或者統(tǒng)一的出口而降低代碼的冗余,增加代碼可讀性。這里挖個(gè)坑,這里會在go-etl展示goto的魅力

注意:很多書籍指出goto會破環(huán)代碼結(jié)構(gòu),降低代碼可讀性,那是因?yàn)檫@些書籍講述使用goto的場景錯(cuò)了。

Leetcode習(xí)題69

我們以leetcode習(xí)題開始,而現(xiàn)在有以一道Leetcode習(xí)題結(jié)束

題目描述

69. x 的平方根

給你一個(gè)非負(fù)整數(shù) x ,計(jì)算并返回 x算術(shù)平方根 。

由于返回類型是整數(shù),結(jié)果只保留 整數(shù)部分 ,小數(shù)部分將被 舍去 。

注意:不允許使用任何內(nèi)置指數(shù)函數(shù)和算符,例如 pow(x, 0.5) 或者 x ** 0.5 。

題目分析

這道題會比Leetcode習(xí)題1更加困難些,這次數(shù)據(jù)范圍是int32的非負(fù)整數(shù)范圍,由于不能使用指數(shù)函數(shù)和算符,為此,在這里我們需要使用二分法,即通過二分[a,b](mid = a + (b-a)/2, 第一輪a=0,b=x)去獲取mid=x/2,如果mid*mid<x 那么此時(shí)二分[a,mid-1],反之二分[mid+1,b], 這樣不斷二分下去直到 mid*mid=x或者a<b。好的,這樣我們獲得了解題思路,但是還有個(gè)問題,選擇y的數(shù)據(jù)類型是什么,如果選擇int32,那么相乘必然超過int32, 為此我們必須選擇int64,注意:在Leetcode習(xí)題9中得出了結(jié)論,int是64位的,所以不用改為int64。

代碼編寫

func mySqrt(x int) int {
	a, b := 0, x //多返回值賦值
	for a <= b { // 無;結(jié)構(gòu)的for
		mid := a + (b-a)/2   //二分區(qū)間
		if mid*mid == x { //if語句
			return mid
		}
		if mid*mid < x { //if-else語句
			a = mid + 1   //選擇較大的區(qū)間
		} else {
			b = mid - 1  //選擇較小的區(qū)間
		}
	}
	return b
}

本篇小結(jié)

恭喜你已經(jīng)完成了所有控制結(jié)構(gòu)的學(xué)習(xí),你以及知道了所有控制結(jié)構(gòu)用到的保留字和注意點(diǎn)。另外,通過Leetcode習(xí)題69和Leetcode習(xí)題9,你已經(jīng)知道在編程時(shí)選擇數(shù)據(jù)類型的重要性,并且練習(xí)了所有控制結(jié)構(gòu)。這里的相關(guān)代碼放在go語言學(xué)習(xí)的go-base/3中,請下載后進(jìn)行實(shí)際的練習(xí)

注意:之后的Leetcode題目解答以及使用工具的編程中,數(shù)據(jù)類型的選擇以及控制結(jié)構(gòu)的應(yīng)用是非常重要的,也是最為基礎(chǔ)的。

下篇預(yù)告

go語言復(fù)合類型文章來源地址http://www.zghlxwxcb.cn/news/detail-659392.html

到了這里,關(guān)于3.你所不知道的go語言控制語句——Leetcode習(xí)題69的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 你所不知道的ASP.NET Core進(jìn)階系列(三)

    你所不知道的ASP.NET Core進(jìn)階系列(三)

    一年多沒更新博客,上一次寫此系列還是四年前,雖遲但到,沒有承諾,主打隨性,所以不存在斷更,催更,哈哈,上一篇我們細(xì)究從請求到綁定詳細(xì)原理,本篇則是探討模型綁定細(xì)節(jié),當(dāng)一個(gè)問題產(chǎn)生到最終解決時(shí),回過頭我們整體分析其產(chǎn)生背景以及設(shè)計(jì)思路才能有所獲

    2024年02月05日
    瀏覽(436)
  • 你所不知道的 GitHub 快捷鍵及實(shí)用技巧

    你所不知道的 GitHub 快捷鍵及實(shí)用技巧

    目錄 一、 搜索 1. 快捷鍵 S 或 / , 聚焦搜索欄 2. 高級搜索 2.1 按 star?數(shù)查詢 2.2 按 fork 數(shù)查詢 2.3 按 topic 數(shù)查詢 2.4 按時(shí)間查詢 2.5?按作者查詢 2.6?排除特定內(nèi)容 二、網(wǎng)頁快捷鍵 1. GitHub 全局快捷鍵 1.1?快捷鍵 S 或 / , 聚焦搜索欄 1.2 快捷鍵 G + N,跳轉(zhuǎn)到消息頁 1.3 快捷鍵

    2023年04月08日
    瀏覽(93)
  • F5是什么意思?聊聊你所不知道的F5

    F5是什么意思?聊聊你所不知道的F5

    5月底,有幸參加了F5 Forum 科技趨勢峰會,這讓我不僅關(guān)注數(shù)字化企業(yè)和應(yīng)用服務(wù)的技術(shù)趨勢,也對華麗轉(zhuǎn)型后的F5有了更深入的了解。如果你對F5是什么意思尚且存在疑問,那這篇文章我們就聊聊我眼中的F5,這個(gè)應(yīng)用及API交付和安全防護(hù)市場的頂級玩家。 ? F5的成就是有目共

    2024年02月13日
    瀏覽(90)
  • 你所不知道的NVMe SSD固態(tài)硬盤讀寫速度及國貨的驚喜--基于FPGA的速度測試

    你所不知道的NVMe SSD固態(tài)硬盤讀寫速度及國貨的驚喜--基于FPGA的速度測試

    ??在\\\"FPGA實(shí)現(xiàn)高帶寬NVMe SSD讀寫\\\"帖子中介紹了項(xiàng)目背景及系統(tǒng)架構(gòu)、FPGA實(shí)現(xiàn)NVMe讀寫的大致實(shí)現(xiàn)方法。項(xiàng)目中需要將圖像傳感器產(chǎn)生的高速數(shù)據(jù)流實(shí)時(shí)穩(wěn)定的持續(xù)存儲,即不僅要求較高的存儲帶寬,還同時(shí)需要該存儲帶寬保持始終穩(wěn)定、持續(xù)。 ??在項(xiàng)目做系統(tǒng)設(shè)計(jì)的時(shí)候

    2024年02月06日
    瀏覽(91)
  • 2.如何選擇go語言基礎(chǔ)類型——Leetcode習(xí)題9

    目錄 本篇前瞻 Leetcode習(xí)題9 題目描述 原題解析 代碼編寫 有符號整形 基本數(shù)據(jù)類型 整形 有符號整形 無符號整形 浮點(diǎn)型 布爾型 字符 本篇小結(jié) 下一篇預(yù)告 歡迎來go語言的基礎(chǔ)篇,這里會幫你梳理一下go語言的基本類型,注意本篇有參考go圣經(jīng),如果你有完整學(xué)習(xí)的需求可以看

    2024年02月12日
    瀏覽(23)
  • 你所不了解的靜態(tài)路由特點(diǎn)及配置分析

    ?許多讀者朋友錯(cuò)誤地認(rèn)為靜態(tài)路由很簡單,就一個(gè)命令,沒什么好學(xué)的。其實(shí)這是因?yàn)樗麄兏緵]有深入理解靜態(tài)路由的工作原理,對于僅有一條靜態(tài)路由配置命令中的各參數(shù)和選項(xiàng)的含義和使用方法也是一知半解,結(jié)果造成的是遇到一些靜態(tài)路由故障時(shí)無法進(jìn)行分析,而

    2024年02月06日
    瀏覽(24)
  • Go語言中的流程控制語句

    Go語言中的流程控制語句

    目錄 流程控制語句 if語句 if···else語句 switch語句 for循環(huán) break語句 continue語句 goto語句 在Go語言中,可以在if后面加上一段執(zhí)行語句,執(zhí)行語句也可以用作對if條件的判斷。它的語法格式為: a賦值為condition()方法的結(jié)果,然后讓a與nil進(jìn)行判斷,如果為true,那么會執(zhí)行代碼塊中

    2024年02月03日
    瀏覽(14)
  • Go語言入門記錄:從基礎(chǔ)到變量、函數(shù)、控制語句、包引用、interface、panic、go協(xié)程、Channel、sync下的waitGroup和Once等

    Go語言入門記錄:從基礎(chǔ)到變量、函數(shù)、控制語句、包引用、interface、panic、go協(xié)程、Channel、sync下的waitGroup和Once等

    程序入口文件的包名必須是main,但主程序文件所在文件夾名稱不必須是 main ,即我們下圖 hello_world.go 在 main 中,所以感覺 package main 寫順理成章,但是如果我們把 main 目錄名稱改成隨便的名字如 filename 也是可以運(yùn)行的,所以迷思就在于寫在文件開頭的那個(gè) package main 和 java

    2024年02月11日
    瀏覽(18)
  • PHP 課后習(xí)題解析與筆記——流程控制語句習(xí)題

    PHP 課后習(xí)題解析與筆記——流程控制語句習(xí)題

    這篇文章記錄一下幫助粉絲朋友解決的 PHP 課后習(xí)題,內(nèi)容很基礎(chǔ),是關(guān)于 PHP 流程控制語句的使用練習(xí),題目內(nèi)容如下圖的兩題。這里我用 vscode 編譯器和 Wampserver 完成這些題目。 php編寫函數(shù)實(shí)現(xiàn):輸入一個(gè)整數(shù),判斷它能否被 3、5、7 整除,并輸出以下信息之一: 能同時(shí)被

    2024年02月09日
    瀏覽(25)
  • Go:條件控制語句

    Go:條件控制語句

    在 Go 語言中,主要的條件控制語句有 if-else 、 switch 和 select 。以下是對它們的簡單介紹: if 語句用于根據(jù)條件執(zhí)行不同的代碼塊。它的基本形式如下: condition 是一個(gè)布爾表達(dá)式,如果為真,將執(zhí)行與 if 關(guān)聯(lián)的代碼塊。 可以有零個(gè)或多個(gè) else if 部分,每個(gè) else if 部分都有一

    2024年02月05日
    瀏覽(45)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包