제안이 도착했습니다. 친구를 찾아 픽업하세요! 2022년 봄학기 채용 체크인 이벤트에 참여하고 있습니다. 자세한 이벤트 내용 을 보려면 클릭 하세요 .
[브러시 질문일기] 67. 이진 합산
이 리뷰 일기의 15번째 기사 제목: 67. 이진 합산 , 단순
1. 주제 설명:
저녁에 운동한 후 계속 질문을 보세요 . 이 질문은 제목이 너무 명확하고 설명이 매우 짧고 간단한 질문인 것 같습니다 . 이것은 간단한 질문입니다. 머리를 바꿔봅시다 .
그러나 우리는 가볍게 생각할 수 없으며 여전히 이 질문이 제시하는 핵심 내용과 테스트 포인트를 주의 깊게 분석해야 합니다.
2. 사고 분석:
1. 이 질문은 어떤 생각을 조사합니까? 당신의 생각은 무엇입니까?
제목에 제공된 정보에는 다음과 같은 요점이 있습니다.
- 주어진 이진수는 모두 문자열 이고 우리가 반환하는 것도 문자열이어야 합니다.
- 문자열의 숫자는 0과 1 만 있고, 주어진 문자열은 선행 0을 포함하지 않으며, 배열의 길이는 1에서 10까지의 4제곱 이므로 이 질문에 대한 비정상 입력을 고려할 필요가 없습니다. .
우리의 예를 확인하십시오: a = "1010", b = "1011"
이 예를 보면 **a 배열의 길이는 b 배열의 길이와 같으며 ** 중간은 carry를 포함하고 최상위 비트도 carry를 포함합니다.
다음 예에서 a 배열의 길이가 b 배열의 길이보다 작거나 b 배열의 길이가 a 배열의 길이보다 작습니다 . 기본적으로 위는 a 배열입니다. , 다음은 b 배열입니다.
일반적으로 다음 사항을 고려해야 합니다.
- 렌 (a) == 렌 (b)
- len (a) <len (b)
- len (a) > len (b)
- 휴대의 취급
3. 코딩
위의 논리와 분석에 따르면 다음 코드로 변환할 수 있습니다.
인코딩은 다음과 같습니다.
func addBinary(a string, b string) string {
lenA,lenB := len(a),len(b)
n := 0
if lenA > lenB {
n = lenA
}else{
n = lenB
}
res := ""
jinwei := 0
// 使用较长数组的长度来控制循环
for i:=0; i<n; i++ {
// 对应位数 a 数组上有值,那就进行相加
if i<lenA {
jinwei += int(a[lenA-i-1] - '0')
}
// 对应位数 b 数组上有值,那就进行相加
if i<lenB {
jinwei += int(b[lenB-i-1] - '0')
}
// a 数组和 b 数组对应位置上相加后,需要填在该位置的值
res = strconv.Itoa(jinwei % 2) + res
// 需要向前进位的数据
jinwei = jinwei / 2
}
// 判断最后是否需要进位
if jinwei > 0{
res = "1" + res
}
return res
}
复制代码
위의 코딩을 읽어보면 코딩 전 생각과 분석을 바탕으로 하는 코딩임을 알 수 있습니다.
작은 것에서 큰 것을 보려면 코딩하기 전에 계획 설계를 명확하고 실용적으로 만들고 모든 세부 사항과 사각 지대를 하나씩 분해하여 코딩 후 위험을 줄일 필요가 있습니다.
4. 요약:
이 질문 의 시간 복잡도 는 분명히 O(n)이고, n은 더 긴 배열의 길이이며, 공간 복잡도는 O(1)이며, 이는 일정한 수준의 메모리 소비를 도입합니다 .
원래 제목 주소: 67. 이진 합계
나는 오늘 여기, 내가 배운 것, 편차가 있으면 나를 수정하십시오.
좋아요, 팔로우, 즐겨찾기에 오신 것을 환영합니다.
친구 여러분, 여러분의 지원과 격려는 제가 지속적으로 공유하고 품질을 향상시킬 수 있는 원동력입니다.
자, 이번에야말로
기술은 열려 있고 우리의 사고 방식은 열려 있어야 합니다. 변화를 수용하고 태양 아래에서 살아가며 앞으로 나아가십시오.
꼬마 악마소년 네자 입니다 좋아요 , 팔로우, 수집 환영합니다 다음에 또 만나요~